我的理解是(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)对吗?)
1 回答
build
命令的主要目的是实际触发构建,即编译 . 默认情况下stack build
将构建stack.yaml
的packages
部分中列出的所有"local"包 . 如果将包名称作为参数传递给build
,则通常具有以下两个目的之一:您希望在多包项目中仅构建某个(本地)包
或者您要从非本地程序包安装可执行文件,例如
hlint
. 通常,您将使用stack install PKG
执行此操作,这是stack build --copy-bins PKG
的快捷方式 .堆栈的一个核心设计原则是构建应该是可重现的,即具有相同代码和相同配置的项目应始终为
stack build
提供相同的结果 .这意味着
stack build
或stack install
将永远不会更改项目配置或添加项目的依赖项 .有关
build
命令的更多详细信息,请查看the relevant docs .