为什么'构建'一个包而不是在'stack.yml'中使用'extra-deps'?

时间:2016-12-30 15:44:06

标签: haskell-stack

我理解(1)我项目的build-depends文件中的.cabal部分将确保stack.yml中指定的解析程序中存在的指定包可用(在适当的版本中) )并在我测试或运行我的包时使用(例如,使用stack ghcistack test等。)

我还收集(2)我extra-deps的{​​{1}}部分用于获取不在指定解析器中的包。

但我对

的作用感到困惑
stack.yml

这与stack build some-package 有何不同?我extra-depssome-package等时会使用stack test吗?为什么要使用它而不是仅仅将stack ghci添加到some-package? (而且,我有(1)和(2)对吗?)

1 个答案:

答案 0 :(得分:1)

build命令的主要目的是实际触发构建,即编译。默认情况下,stack build将构建stack.yaml的{​​{1}}部分中列出的所有“本地”包。如果将包名称作为参数传递给packages,则通常具有以下两个目的之一:

  1. 您只想在多包项目中构建某个(本地)包
  2. 或者您要从非本地软件包安装可执行文件,例如build。通常,您会使用hlint执行此操作,这是stack install PKG
  3. 的快捷方式

    堆栈的一个核心设计原则是构建应该是可重现的,即具有相同代码和相同配置的项目应始终为stack build --copy-bins PKG提供相同的结果。

    这意味着stack buildstack build永远不会更改项目配置或向项目添加依赖项。

    有关stack install命令的更多详细信息,请查看the relevant docs