首页 > 解决方案 > 什么是 package.yaml & stack.yaml & Setup.hs & the-project-name.cabal 文件?

问题描述

我发现,当我使用该stack new the-project-name new-template命令时,许多文件会生成到一个新目录中。我注意到以下 4 个特殊文件:

package.yaml
stack.yaml
Setup.hs
the-project-name.cabal

这 4 个文件似乎打算为包管理软件提供元数据,但它们看起来很混乱,我的意思是,为什么有 4 个,为什么不只有一个,它们之间有什么区别?

标签: haskellcabalhaskell-stack

解决方案


这些配置文件有不同的用途。目前尚不清楚什么更好:具有单个包罗万象的配置文件或针对不同构建工具和不同目标的不同文件。

项目名称.cabal

此文件包含您的包的描述。比如,模块列表、库依赖项、编译器选项、项目元数据(作者姓名、包版本等)。此描述以特殊cabal格式指定。

包.yaml

该配置文件由hpack工具使用。它允许指定您在.cabal文件中指定的相同内容。但采用 YAML 格式而不是自定义cabal格式。它还增加了一些功能cabal。如果您现在不想深入hpack研究,可以安全地删除package.yaml文件。请注意,该.cabal文件是由hpackfrom file生成的,package.yaml因此如果.cabal您使用的是hpack.

堆栈.yaml

stack构建工具的配置。添加一些额外的配置参数。最重要的:LTS 解析器的名称。

安装程序.hs

用于添加一些构建挂钩。在几乎所有情况下,您也可以删除此文件。但我可以从我们的工作中给你这个文件的真实使用示例。

我们正在编写服务,不同的节点应该使用协议缓冲区格式进行通信。TL;DR 描述消息规范的很好的格式。这些消息写在扩展名为.proto. 但我们实际上想要使用 Haskell 类型。现有的库proto-lens可以获取以 Protocol Buffers 格式编写的文件,解析这些文件并生成包含表示这些消息的数据类型的 Haskell 模块。此文件生成应在项目编译之前完成。所以这个过程是在Setup.hs文件中描述的。


推荐阅读