【问题标题】:How to update .cabal file using Stack?如何使用 Stack 更新 .cabal 文件?
【发布时间】:2016-02-26 22:36:13
【问题描述】:

我有一个使用 Stack 创建的旧项目。我想将我的项目从 Stackage 移到最新的 LTS 集。

当我更改 stack.yaml 文件中的解析器时,问题是 .cabal 文件中的 extra-deps 中的版本仍然适用于旧的 LTS 集。有没有办法使用 Stack 自动更新 .cabal 文件中的版本号?

【问题讨论】:

  • 如果您使用的是 Stack,为什么您的 cabal 文件中有版本号? (我自己是一个haskell newb,所以这是一个实际的问题,而不是批评)
  • @ChrisMartin 如果要将项目打包为库,则它需要在 cabal 文件中具有适当的依赖范围。
  • 我认为在 .cabal 文件中提供一个具有无限依赖关系的库是可以的,只要你也提供一个 stack.yaml 文件。如果你通过 Stackage 分发你的包,构建服务器将继续编译您的项目并检查错误。这还不错。 (而且限制你的依赖项本身并不存在问题。)
  • @haoformayor 运送具有完全无限依赖的包裹被认为是非常糟糕的形式。错误检查仅针对最新的堆栈范围。对于其他所有人,包括可能固定到旧堆栈版本的人,该软件包几乎无法使用。为 all hackage 包推荐的策略是使用包版本策略。由于 stackage 上的库是 hackage 的一个子集,它们也不例外。
  • 包已经无法使用;有很多关于无法构建旧包的人的帖子。整件事情,无论是装订的还是堆叠的,都是半生不熟的

标签: haskell haskell-stack


【解决方案1】:

您可以在您的 cabal 文件中简单地删除(部分)build-depends 的(上)边界。

在分发包时,如果您使用 --pvp-bounds 标志,堆栈可以自动添加依赖边界,例如stack sdist --pvp-bounds upperstack upload --pvp-bounds both

此功能上有一个blog post by Michael Snoyman

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多