我有两个Haskell库lib-a
和lib-b
,它们都托管在私有git-reos上。lib-b
依赖于lib-a
,两者构建都没有问题。现在我想将lib-b
导入到另一个项目中,从而使用git
指令将其添加到堆栈配置中,如下所示:
- git: git@github.com:dataO1/lib-b.git
commit: deadbeef102958393127912734
堆栈似乎仍然需要lib-a
:的特定版本
In the dependencies for application-0.1.0.0:
lib-a needed, but the stack configuration has no specified version (no package with that name found,
perhaps there is a typo in a package's build-depends or an omission from the stack.yaml packages
list?)
needed due to application-0.1.0.0 -> lib-b-0.1.0.0
现在的问题是,堆栈是否可以在不明确指定的情况下,以某种方式为嵌套的git依赖项找出特定的版本?如果项目增长,我不想每次更新lib-a时手动调整。
旁注:我正在为所有三个堆栈项目使用nixOS和nix
指令。
Stack遵循基于快照的包管理模型,这意味着它有一些"全球";指定的一组包(固定版本(,您可以使用。在Stack的情况下,这组包被称为Stackage。核心思想是要有一套明确指定的软件包供您使用。
所以简短的答案是否定的——它自己无法解决,你必须手工添加。
但是!您只需要指定不在快照中的包。例如,包lib-a
可能主要依赖于Haskell中常用的包(例如,base
、aeson
…(,并且这些包将已经在Stackage中。因此,即使项目增长,您也只需添加";几个";参考数字。
所以这通常不会成为一个问题。