Stack.yaml vs package.yaml用于添加依赖项

问题描述 投票:1回答:3

可能是一个愚蠢的问题:

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

(我看到existing question询问这两个文件之间的冗余,但我甚至都看不到package.yaml文件!!)

如果它有帮助:

$ stack --version
Version 1.9.3, Git revision 40cf7b37526b86d1676da82167ea8758a854953b (6211 commits) x86_64 hpack-0.31.1
haskell haskell-stack
3个回答
3
投票

package.yaml实际上是由hpack处理的;它不是一个堆栈功能,除非它在你的项目中看到它,它将使用它并生成一个.cabal文件。

您可以从头开始创建package.yaml。你不需要做stack new或其他什么。

我当然发现它使用package.yaml而不是project.cabal方便。这里没有很好的用户指南(正如hpack README中所指出的那样),但是有一些例子,你会发现它并没有多少:

我看到一些提到Cabal库现在支持新功能以减少繁琐的重复(可能是以>= 2.x格式?),这可能会使package.yaml的需求很快消失,这很好。


2
投票

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

如果您只是使用项目主堆栈快照中的包并使用所有这些包的默认构建设置:您通常根本不需要编辑stack.yaml。在以下情况中,stack.yaml中提到了依赖关系:

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

1
投票

没关系,原来我跑了stack new <project> simple;如果我运行stack new <project> new-project,它将生成package.yaml文件而不是我目前在那里找到的<project>.cabal文件。

© www.soinside.com 2019 - 2024. All rights reserved.