问题描述
假设我想修改一些相互依赖并运行的 hackage 包
stack unpack foo-1.2.0
和
stack unpack bar-1.0.0
其中 bar
取决于 foo
。
现在,要使用修改后的 bar
构建修改后的 foo
,我在 bar.cabal
中指定:
build-depends:
foo == 1.2.0
并添加到我的bar
的{{1}}:
stack.yaml
这有效,并且构建良好,但似乎如果 packages:
- .
- rel/path/to/foo-1.2.0/
的依赖项,例如 bar
,本身依赖于 some-package
,它将默认为 hackage 版本,而不是使用我的尽管我的修改版本满足版本限制,但修改后的版本。有没有办法在构建过程中强制链上的其他依赖项使用我的本地版本的包?我很欣赏这是一个非常不寻常的用例。
奇怪的是,我能够构建得很好,但尝试加载到 foo
中失败:
stack ghci
解决方法
根据Cabal User Guide,当开发一个带有多个project的local packages时:
本地包,以及依赖的外部包[...] 在它们之上,是就地构建的,这意味着它们始终是构建的 专用于项目,未全局安装。
因此似乎即使是外部包(即来自 Hackage 或其他包存储库的包)也会使用本地包,代价是需要为当前项目重新构建。