我刚刚制作了a fork来修复html-conduit中的错误,该错误是我的模板库所依赖的。我维护了一个依赖于该模板库的应用。
所以,我updated my library's stack.yaml
指向叉子:
extra-deps:
[...]
- git: https://github.com/emhoracek/xml.git
commit: 3e1bd12882d7c452d76e39e1db1b95577f38d4d7
subdirs:
- xml-conduit
- html-conduit
并编写了一个测试,以确保更新该依赖关系可以修复该错误。它做了!是的。
然后我更新了我的应用程序以指向更新的模板库:
packages:
[...]
- location:
git: https://github.com/positiondev/larceny
commit: ba743c58ff4ac2606f67336e5e557deacb416ed8
extra-dep: true
我检查以确保此错误已修复我应用中的错误,但没有。直到我将html-conduit
的分叉添加到应用程序的ExtraDeps之前,它仍然存在错误。
这是怎么回事?在决定我的应用应使用哪个版本时,为什么Stack不使用我在库的html-conduit
中指定的stack.yaml
版本?
答案 0 :(得分:2)
任何stack
命令仅引用一个stack.yaml
文件-该文件位于当前目录或某个父目录中。您所依赖的库不需要具有stack.yaml
文件,并且如果存在则将被忽略。
这使版本规范保持简单。对于两个stack.yaml
文件要求同一个库的不同版本的情况,没有任何规则可以处理,因为没有内部版本可以查询两个stack.yaml
文件。
另一方面,将查询每个库的.cabal
文件,因此,如果某些.cabal
文件需要一个stack.yaml
的库,则会在构建初期出现错误。未指定版本,或者.cabal
中的版本边界与stack.yaml
中的特定版本不匹配。