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

Best way to include forked and unpublished version of a Hackage-published library in my own project

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

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

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

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

也不起作用

有什么好的设置方法吗?

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

这是来自 the document 的示例:

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

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

除了yuji-yamamoto的正确和准确的回答之外,我发现我还可以从otherlib目录中直接将符号link制作到我自己项目的基目录中,并将其名称添加到 stack.yaml 中的 packages 中。具体来说,修改后的部分是:

packages:
- .
- otherlib-0.9.1

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

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