Cabal 中 "source-repository-package" 和 "local no-index repositories" 的区别
Difference between "source-repository-package" and "local no-index repositories" in Cabal
我知道我可以 add a local package to a cabal project by listing it in the packages:
section of the cabal.project
归档。最简单的例子是 packages: .
.
在cabal.project
我还可以加上这两个东西:
-
source-repository-package
type: git
location: git@github.com:haskell-streaming/streaming.git
tag: eb3073e6ada51b2bae82c15a9ef3a21ffa5f5529
- 的定义
repository my-local-repository
url: file+noindex:///home/zzz/no-index-repo-dir
好像他们两个都让我给项目加包。两者有什么区别?
(注意:这个问题与同名的 source-repository:
字段无关,它只是说明哪个是与包的源代码关联的存储库。 )
只有 source-repository-package
实际上是在向您的项目添加“本地包”。它的行为与在 packages:
中列出包的源文件夹非常相似,只是源代码是根据需要下载的。特别是cabal clean
.
后运行cabal build
时会重新下载
因为它是你项目中的本地包,所以其他 cabal 项目不知道它。添加到其他本地项目需要重新编译。
同时,local no-index package repositories 是 Hackage 或 Stackage 意义上的存储库,仅在本地文件系统中。它们可以在单个项目的 cabal.project
文件或全局 cabal 配置 (~/.cabal/config
) 中指定。
在这些存储库中找到的包不被视为项目的“本地包”。他们的库被编译一次并在所有知道包存储库的项目之间共享(如果存储库在 ~/.cabal/config
中列出,这将是所有项目)。而cabal clean
之后的cabal build
不会触发重新编译。
我知道我可以 add a local package to a cabal project by listing it in the packages:
section of the cabal.project
归档。最简单的例子是 packages: .
.
在cabal.project
我还可以加上这两个东西:
-
source-repository-package type: git location: git@github.com:haskell-streaming/streaming.git tag: eb3073e6ada51b2bae82c15a9ef3a21ffa5f5529
- 的定义
repository my-local-repository url: file+noindex:///home/zzz/no-index-repo-dir
好像他们两个都让我给项目加包。两者有什么区别?
(注意:这个问题与同名的 source-repository:
字段无关,它只是说明哪个是与包的源代码关联的存储库。 )
只有 source-repository-package
实际上是在向您的项目添加“本地包”。它的行为与在 packages:
中列出包的源文件夹非常相似,只是源代码是根据需要下载的。特别是cabal clean
.
cabal build
时会重新下载
因为它是你项目中的本地包,所以其他 cabal 项目不知道它。添加到其他本地项目需要重新编译。
同时,local no-index package repositories 是 Hackage 或 Stackage 意义上的存储库,仅在本地文件系统中。它们可以在单个项目的 cabal.project
文件或全局 cabal 配置 (~/.cabal/config
) 中指定。
在这些存储库中找到的包不被视为项目的“本地包”。他们的库被编译一次并在所有知道包存储库的项目之间共享(如果存储库在 ~/.cabal/config
中列出,这将是所有项目)。而cabal clean
之后的cabal build
不会触发重新编译。