在我自己的项目中包含 Hackage 发布的库的分叉和未发布版本的最佳方式



我正在使用 stack 在 Haskell 中构建一个项目,并且需要更新我的项目所依赖的库之一 - 我们称之为otherlib

我已经分叉了otherlib并进行了所需的更改,增加了版本号(我们称我的版本 0.9.1(,使用 cabal 构建它(这是该项目使用的(,并运行 cabal install otherlib 将我修改后的版本放入本地缓存中。现在我想尽可能合理地将其包含在我自己的项目中。

我对otherlib所做的更改(IMO(非常合理,一旦我创建了PR,就有机会被维护者接受。但与此同时,我有一个版本不在stack的解决方案集中。

在我的package.yaml依赖项中包含otherlib-0.9.1不起作用,将其添加到我的stack.yaml extra-deps中也不起作用。

有没有设置它的好方法?

您可以在 stack.yaml extra-deps指定 Git 存储库(及其修订版(。

下面是文档中的示例:

extra-deps:
- git: git@github.com:yesodweb/wai
  commit: 2f8a8e1b771829f4a8a77c0111352ce45a14c30f
  subdirs:
  - auto-update
  - wai

注意 仅当存储库包含多个包(如 yesodweb(时,才需要subdirs

除了山本雄二的正确准确答案外,我发现我还可以从otherlib目录直接将符号链接添加到我自己项目的基目录中,并将其名称添加到stack.yaml packages中。具体来说,修改后的部分如下:

packages:
- .
- otherlib-0.9.1

..目录本身也称为otherlib-0.9.1 .

此解决方案适用于 otherlib 在本地文件系统之外的任何地方尚不可用的情况。

最新更新