Как Stack определяет зависимости? - PullRequest
0 голосов
/ 18 октября 2018

Я только что сделал вилкой , чтобы исправить ошибку в html -роводнике, от которой зависела моя библиотека шаблонов.Я поддерживаю приложение, которое зависит от этой библиотеки шаблонов.

Итак, я обновил stack.yaml моей библиотеки, указав на вилку:

extra-deps:
  [...]
  - git: https://github.com/emhoracek/xml.git
    commit: 3e1bd12882d7c452d76e39e1db1b95577f38d4d7
    subdirs:
       - xml-conduit
       - html-conduit

И написалтест, чтобы убедиться, что обновление этой зависимости исправило ошибку.Это сделал!Yay.

Затем я обновил свое приложение, указав на обновленную библиотеку шаблонов:

packages:
  [...]
  - location:
      git: https://github.com/positiondev/larceny
      commit: ba743c58ff4ac2606f67336e5e557deacb416ed8
    extra-dep: true

Я проверил, чтобы убедиться, что это исправило ошибку в моем приложении, но оно не помогло.«т .Пока я не добавил свой форк html-conduit в дополнительные приложения моего приложения, в нем все еще была ошибка.

Что происходит?Почему Stack не использует версию html-conduit, указанную в stack.yaml моей библиотеки, когда он решает, какую версию должно использовать мое приложение?

1 Ответ

0 голосов
/ 18 октября 2018

Любая команда stack ссылается только на один файл stack.yaml - тот, который находится в текущем каталоге, или, возможно, некоторый родительский каталог.Библиотеки, от которых вы зависите, не обязательно должны иметь файл stack.yaml, и он игнорируется, если он существует.

Это упрощает спецификацию версии.Не существует правил для обработки случая, когда два файла stack.yaml запрашивают разные версии одной и той же библиотеки, поскольку ни одна сборка никогда не обращается к двум файлам stack.yaml.

С другой стороны, файл .cabalк каждой библиотеке обращаются, поэтому вы получите ошибку в начале сборки, если для какого-либо файла .cabal требуется библиотека, для которой stack.yaml не указывает версию, или если версия ограничена в .cabal don 'не соответствует определенной версии в stack.yaml.

...