使用堆栈时嵌套 git 依赖项 (Haskell)
Nested git dependencies when using Stack (Haskell)
我有两个 Haskell 库 lib-a
和 lib-b
,都托管在私人 git 存储库中。 lib-b
依赖于 lib-a
,两者构建都没有问题。
现在我想将 lib-b
导入另一个项目,然后使用 git
指令将其添加到堆栈配置中,如下所示:
- git: git@github.com:dataO1/lib-b.git
commit: deadbeef102958393127912734
Stack 似乎仍然需要 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
现在的问题是,stack 能否在不明确指定它们的情况下以某种方式找出嵌套 git 依赖项的特定版本?如果项目增长,我不想每次更新 lib-a 时都手动调整它。
旁注:我正在为所有三个堆栈项目使用 nixOS 和 nix
指令。
Stack 遵循基于快照的包管理模型,这意味着它具有一些您可以使用的“全局”指定包集(固定版本)。在 Stack 的案例中,这组包称为 Stackage。核心思想是拥有您正在使用的这组明确指定的包。
所以简短的回答是否定的,它不能自己计算出来,你必须手动添加它们。
但是!您只需要指定不在快照中的包。例如包 lib-a
可能主要依赖于 Haskell 中常用的包(例如 base
、aeson
、...)并且这些包已经在 Stackage 中。所以即使项目增长,你也只会添加“一些”git refs.
所以这通常不会成为问题。
我有两个 Haskell 库 lib-a
和 lib-b
,都托管在私人 git 存储库中。 lib-b
依赖于 lib-a
,两者构建都没有问题。
现在我想将 lib-b
导入另一个项目,然后使用 git
指令将其添加到堆栈配置中,如下所示:
- git: git@github.com:dataO1/lib-b.git
commit: deadbeef102958393127912734
Stack 似乎仍然需要 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
现在的问题是,stack 能否在不明确指定它们的情况下以某种方式找出嵌套 git 依赖项的特定版本?如果项目增长,我不想每次更新 lib-a 时都手动调整它。
旁注:我正在为所有三个堆栈项目使用 nixOS 和 nix
指令。
Stack 遵循基于快照的包管理模型,这意味着它具有一些您可以使用的“全局”指定包集(固定版本)。在 Stack 的案例中,这组包称为 Stackage。核心思想是拥有您正在使用的这组明确指定的包。
所以简短的回答是否定的,它不能自己计算出来,你必须手动添加它们。
但是!您只需要指定不在快照中的包。例如包 lib-a
可能主要依赖于 Haskell 中常用的包(例如 base
、aeson
、...)并且这些包已经在 Stackage 中。所以即使项目增长,你也只会添加“一些”git refs.
所以这通常不会成为问题。