首页 文章

为什么'build'包而不是在'stack.yml'中使用'extra-deps'?

提问于
浏览
1

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

我还收集(2)我的 stack.ymlextra-deps 部分用于获取不在指定解析器中的包 .

但我对这个角色感到困惑

stack build some-package

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

1 回答

  • 1

    build 命令的主要目的是实际触发构建,即编译 . 默认情况下 stack build 将构建 stack.yamlpackages 部分中列出的所有"local"包 . 如果将包名称作为参数传递给 build ,则通常具有以下两个目的之一:

    • 您希望在多包项目中仅构建某个(本地)包

    • 或者您要从非本地程序包安装可执行文件,例如 hlint . 通常,您将使用 stack install PKG 执行此操作,这是 stack build --copy-bins PKG 的快捷方式 .

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

    这意味着 stack buildstack install 将永远不会更改项目配置或添加项目的依赖项 .

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

相关问题