Как установить/использовать локальную версию пакета с помощью Stack?

Ситуация в том, что я пытаюсь установить Netwire с помощью Stack. Однако в последней версии 5.0.1 существует проблема, о которой сообщает dhobbs: http://hub.darcs.net/ertes/netwire/issue/13

Так как я не знаю, когда проблема будет исправлена, я скачал репо и внес изменения самостоятельно. Однако я не понимаю, как установить такую ​​локально исправленную версию. stack install не устанавливает это в ~/.stack. У кого-нибудь есть идея?

Обновление

Теперь я разрабатываю некоторые другие библиотеки, используя Stack. Как сделать другой проект использовать эти библиотеки? Жесткое кодирование относительного пути выглядит невероятно уродливо.

Ответы

Ответ 1

Итак, у вас есть проект, в котором вы хотите использовать локально исправленную версию Netwire, и в вашем проекте у вас есть stack.yml в качестве примера:

flags: {}
packages:
- '.'
extra-deps: {}
resolver: lts-3.7

У вас также есть зависимость от netwire, объявленная в вашем файле кэша.

Чтобы использовать исправленную Netwire в этом проекте, вы просто помещаете исправленный пакет Netwire в подкаталог вашего проекта, возможно, называемый netwire, и обновляете свой stack.yml как таковой:

flags: {}
packages:
- '.'
- netwire
extra-deps: {}
resolver: lts-3.7

Теперь stack build построит ваш проект с исправленной версией Netwire.

Вы также можете поместить измененный источник онлайн (если лицензия разрешает) и ссылаться на источник, используя либо URL-адрес tarball

- https://example.com/netwire.tar.gz

или репозиторий git и фиксация:

- location:
    git: [email protected]/netwire
    commit: 6a86ee32e5b869a877151f74064572225e1a0398

(Посмотрите документацию для получения дополнительной информации: https://docs.haskellstack.org/en/stable/yaml_configuration/#packages-and-extra-deps)