为什么 'build' 一个包而不是在 'stack.yml' 中使用 'extra-deps'?
Why 'build' a package instead of using 'extra-deps' in 'stack.yml'?
据我了解 (1) 我项目的 .cabal
文件中的 build-depends
部分将确保指定的包存在于 stack.yml
中指定的解析器中可用(在适当的版本)并在我测试或 运行 我的包时使用(例如,使用 stack ghci
或 stack test
等)。
我还了解到 (2) 我的 stack.yml
的 extra-deps
部分用于获取不在指定解析器中的包。
但我对
的作用感到困惑
stack build some-package
这与 extra-deps
有何不同?当我stack test
或stack ghci
等时会使用some-package
吗?为什么要使用它而不是将 some-package
添加到 extra-deps
? (还有,我的 (1) 和 (2) 对吗?)
build
命令的主要目的是实际触发构建,即编译。默认情况下 stack build
将构建 stack.yaml
的 packages
部分中列出的所有 "local" 包。如果将包名称作为参数传递给 build
,通常具有以下两个目的之一:
- 您只想在多包项目中构建某个(本地)包
- 或者您想要从非本地包安装可执行文件,例如
hlint
。通常,您将使用 stack install PKG
来执行此操作,这是 stack build --copy-bins PKG
. 的快捷方式
stack 的一个核心设计原则是构建应该是可重现的,即具有相同代码和相同配置的项目应该始终为 stack build
提供相同的结果。
这意味着stack build
或stack install
永远不会更改项目配置或向项目添加依赖项。
有关 build
命令的更多详细信息,请查看 the relevant docs。
据我了解 (1) 我项目的 .cabal
文件中的 build-depends
部分将确保指定的包存在于 stack.yml
中指定的解析器中可用(在适当的版本)并在我测试或 运行 我的包时使用(例如,使用 stack ghci
或 stack test
等)。
我还了解到 (2) 我的 stack.yml
的 extra-deps
部分用于获取不在指定解析器中的包。
但我对
的作用感到困惑stack build some-package
这与 extra-deps
有何不同?当我stack test
或stack ghci
等时会使用some-package
吗?为什么要使用它而不是将 some-package
添加到 extra-deps
? (还有,我的 (1) 和 (2) 对吗?)
build
命令的主要目的是实际触发构建,即编译。默认情况下 stack build
将构建 stack.yaml
的 packages
部分中列出的所有 "local" 包。如果将包名称作为参数传递给 build
,通常具有以下两个目的之一:
- 您只想在多包项目中构建某个(本地)包
- 或者您想要从非本地包安装可执行文件,例如
hlint
。通常,您将使用stack install PKG
来执行此操作,这是stack build --copy-bins PKG
. 的快捷方式
stack 的一个核心设计原则是构建应该是可重现的,即具有相同代码和相同配置的项目应该始终为 stack build
提供相同的结果。
这意味着stack build
或stack install
永远不会更改项目配置或向项目添加依赖项。
有关 build
命令的更多详细信息,请查看 the relevant docs。