Можно ли установить версию пакета из github с помощью стека Haskell?
например в файле .cabal
или stack.yaml
, как я могу указать зависимость в репозитории / ветке / ревизии git?
Можно ли установить версию пакета из github с помощью стека Haskell?
например в файле .cabal
или stack.yaml
, как я могу указать зависимость в репозитории / ветке / ревизии git?
Для стека ‹1,11:
В документации для раздела stack.yaml
packages
приведены примеры ссылки на более сложный пакет. локации.
packages: - location: . - location: dir1/dir2 - location: https://example.com/foo/bar/baz-0.0.2.tar.gz - location: http://github.com/yesodweb/wai/archive/2f8a8e1b771829f4a8a77c0111352ce45a14c30f.zip - location: git: [email protected]:commercialhaskell/stack.git commit: 6a86ee32e5b869a877151f74064572225e1a0398 - location: hg: https://example.com/hg/repo commit: da39a3ee5e6b4b0d3255bfef95601890afd80709
Затем добавьте extra-dep: true
в запись package
, чтобы stack
не рассматривал код, который он втягивает, как что-то, над чем вы разрабатываете (например, не загружайте его в GHCi).
Новый синтаксис для Stack> 1.7.1
Как прокомментировал @Flip, документы на docs.haskellstack.org уточнить новый синтаксис для вашего stack.yaml
: (обратите внимание, что необходимо использовать полный хеш фиксации)
extra-deps:
- github: apolishch/prime_table
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
- github: apolishch/reactive-banana
commit: 74bac0f86ed172f95bb6f6a31041992fc161cf79
subdirs: reactive-banana
Для ясности: зависимости в вашем stack.yaml
убедитесь, что пакеты (которых нет в Stackage) доступны, если бы они были нужны какому-то .cabal
файлу в вашем проекте, на всякий случай.
Вам все равно нужно указать имя пакета в build-depends
в вашем .cabal
файле, чтобы сказать, что вы действительно зависите от пакета.
Обратите внимание, что не имеет значения, в какой ветке находится фиксация, и репозитории могут быть вилками. Когда пакет находится в подкаталоге, вы можете указать его, в противном случае он будет по умолчанию на верхнем уровне.
Синтаксис для стека> 1.6.0
extra-deps:
- github: [email protected]:apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
[Edit] Я обнаружил, что иногда синтаксис из 1.7.1 не работает с сообщением об ошибке
C:\Users\username\AppData\Local\Programs\stack\x86_64-windows\ghc-8.4.3\lib/../mingw/bin\ar.exe: .stack-work\dist\7d103d30\build\objs-10648\libHSpackagename-0.1.0.0-DlGXqyeqb9MDn2z8KhgjVb.a: No such file or directory
и я решил это, используя синтаксис 1.6.0, хотя я использовал Stack 1.7.1. При использовании Travis это не удастся, потому что Travis, конечно же, не может клонировать через SSH без ваших ключей SSH. Но вы все равно можете использовать ссылку https как
extra-deps:
- github: https://github.com/apolishch/prime_table.git
commit: a510622a824af999a809191e8c959b8ea5fa8bdb
В моем случае я хотел зависеть от вилки pandoc, указывая точную фиксацию. Это сработало, добавив в stack.yml
следующее:
extra-deps:
- archive: https://github.com/italia/pandoc/archive/1327c564cccf5dfa387a2956443990d9854c85cd.zip
Это будет работать с любым URL-адресом ветвью в Git. Я нашел свой URL-адрес, просмотрев файлы в момент фиксации и скопировав URL-адрес из кнопки «Загрузить ZIP».
Обратите внимание, что моя ветка имеет конкретную версию, более высокую, чем любая версия, которую Stack может получить от преобразователя. Я точно определяю версию в зависимостях Кабала. Если версия в этой ветке будет перекрываться с версией, доступной в индексе преобразователя, я не уверен, какая из них будет выбрана.