我刚刚做了一个分支来修复html-conduit中的一个错误,我的模板库依赖于它。我维护一个依赖于该模板库的应用程序。
因此,我更新了库的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
分支添加到我应用程序的额外部门之前,它仍然存在错误。
这是怎么回事?为什么 Stack 在决定我的应用应使用哪个版本时不使用我在库stack.yaml
中指定的html-conduit
版本?
任何stack
命令都只引用单个stack.yaml
文件 - 当前目录中的文件,或者可能是某个父目录中的文件。 您依赖的库不需要具有stack.yaml
文件,如果存在,则会忽略该文件。
这使版本规范保持简单。 对于处理两个stack.yaml
文件请求同一库的不同版本的情况,没有规则,因为没有生成会引用两个stack.yaml
文件。
另一方面,会查阅每个库的.cabal
文件,因此如果某些.cabal
文件需要stack.yaml
未指定版本的库,或者如果.cabal
中的版本边界与stack.yaml
中的特定版本不匹配,则会在构建的早期收到错误。