stack.yaml vs软件包.YAML用于添加依赖项



可能是一个愚蠢的问题:

堆栈文档提到package.yaml是添加依赖关系的正确位置,但是我在项目目录中看到的只是一个stack.yaml文件;那是正确的地方吗?

(我看到一个现有的问题,询问这两个文件之间的冗余,但我什至没有看到package.yaml文件!!)

如果有帮助:

$ stack --version
Version 1.9.3, Git revision 40cf7b37526b86d1676da82167ea8758a854953b (6211 commits) x86_64 hpack-0.31.1

package.yaml 实际上是由 hpack 处理的;它不是 stack 功能,除了在您的项目中看到一个,它将使用它并生成 .cabal file。

您可以从头开始创建一个 package.yaml 自己。您不需要做stack new或其他事情。

我肯定会使用 package.yaml 而不是 project.cabal 方便地找到它。没有一个好的用户指南,如 hpack readme中所指出的),但是一些示例,您会意识到它没有太多:

  • https://github.com/oprdyn/publish/blob/master/package.yaml
  • https://github.com/oprdyn/docker.haskell/blob/master/files/src/src/baseline/package.yaml

我已经提到 ababal 库现在支持新功能,以减少乏味的重复(也许是>= 2.x格式?),这可能会使 package.yaml <</em>很快就会走开,没关系。

通常package.yaml是添加依赖项的正确位置,stack.yaml是添加有关这些依赖项的其他信息的正确位置。

如果您仅使用项目的主堆栈快照中的软件包,并为所有项目使用默认的构建设置:您通常根本不需要编辑stack.yamlstack.yaml中提到依赖项时:

  • 该软件包不在堆栈快照中
  • 您需要与堆栈快照提供的包装的不同版本
  • 包装(或您需要的特定版本)根本不使用骇客(例如:您需要堆栈才能从github获取它)
  • 您需要用非默认标志编译包装
  • etc

没关系,事实证明我已经运行了 stack new <project> simple;如果我运行了stack new <project> new-project,它将生成package.yaml文件,而不是我当前在那里找到的<project>.cabal文件。

最新更新