[英]How can I update the automatically generated entries of the .cabal and stack.yaml files automatically?
stack.yaml 和 project.cabal 的很大一部分分别由cabal init
和stack init
自动生成。
当我编辑项目的源代码时,其中一些条目可能需要彻底更改。
特别是 stack.yaml 和 project.cabal 中的依赖关系以及 project.cabal 条目 other-extensions 和暴露模块应该自动更新。
如何在没有破坏的情况下自动执行此操作?
首先,您要查找的命令不是stack init
,而是stack new
。 生成stack.yaml
不应该是您的目标,而是应该将重点放在生成project.cabal
或package.yaml
上(如果您喜欢hpack
)。 原因是 cabal 文件指定了实际依赖项以及所有其他样板文件,而stack init
使用来自 cabal 文件的信息来找出可能的解析器,并且您不能仅使用模板插值来自动化此过程. 同时在新项目中生成project.cabal
和所有其他文件在stack
中有一个非常好的解决方案。
您可以在您的 github 帐户(名称很重要)中创建一个像这样的存储库:包含.hsfiles
文件的堆栈模板,其中描述了需要生成哪些文件以及如何生成。 然后你可以直接将它与stack
一起使用,例如对于上面的 repo,我可以这样做:
$ stack new my-new-project github:lehins/lehins-ghc-7
new
命令有多种选项,其中之一是提供自定义变量,这对于您想要实现的目标非常方便。
同样,需要注意的是stack.yaml
是唯一由stack
生成而不使用模板的文件,但这是故意的,以后很容易调整它。
编辑
@leftaroundabout 指出问题是关于更新而不是生成文件。 我建议执行此类操作的唯一方法是从头开始重新生成文件的声明性方式,而不是改变现有文件的命令式方法。 不确定cabal init
,但是使用 stack 就像再运行一次stack new
一样简单:
$ cd my-new -project
$ stack new --bare --force -p var:newval my-new-project github:lehins/lehins-ghc-7
诀窍是您要么为模板中的现有变量传递新值,要么修改模板本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.