创建可以使用堆栈安装的 hackage 包

Create hackage package that can be installed with stack

当 运行 stack sdist 在我的项目目录中时,stack.yaml 文件未包含在 tarball 中(这似乎是 be expected)。

因此,当我将 tarball 上传到 hackage 时,stack install mypackage 它会抱怨缺少我在 stack.yaml 文件中指定的依赖项 (extra-deps)。

$ stack install pandoc-placetable

Run from outside a project, using implicit global project config
Using resolver: lts-5.17 from implicit global project's config file: ~/.stack/global-project/stack.yaml
While constructing the BuildPlan the following exceptions were encountered:

--  Failure when adding dependencies:    
      spreadsheet: needed (>=0.1.3 && <0.1.4), not present in build plan (latest applicable is 0.1.3.4)
    needed for package: pandoc-placetable-0.4

--  While attempting to add dependency,
    Could not find package spreadsheet in known packages

Recommended action: try adding the following to your extra-deps in /Users/maurobieg/.stack/global-project/stack.yaml
- spreadsheet-0.1.3.4

或者如果 hackage 包 stack 有进一步的 hackage 依赖性,推荐的方法是什么?

更新:我刚刚将extra-source-files: stack.yaml添加到cabal文件中,stack.yaml确实包含在新发布版本的tarbal中。尽管如此,stack install pandoc-placetable-0.4.1还是报同样的错误。

我也可以告诉不想在系统上安装 cabal-install 的人从 GitHub 克隆,然后使用 stack 构建。这是小包装的推荐方法吗?或者我应该让他们在他们的全局 stack.yaml 中包含 pandoc-placetable(即 spreadsheet)的依赖项?闻起来像污染了全局文件...

正如@mgsloan 在上面的评论中提到的:有一个开放的stack issue about using stack.yaml from hackage package

我想在它修复之前我会告诉人们从 GitHub 克隆(或如@MichaelSnoyman 提到的 stack unpack)然后 cd 克隆到新创建的目录中stack install 在那里。