在我自己的项目中包含 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.yaml
的 extra-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 在本地文件系统之外的任何地方尚不可用的情况。
我正在 Haskell 使用 stack
构建一个项目,需要更新我的项目所依赖的库之一——我们称之为 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 个存储库(及其修订版本)。
这是来自 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 在本地文件系统之外的任何地方尚不可用的情况。