使用 Stack 作为全局包管理器的推荐方法

2024-01-02

例如,我想在全球范围内安装一些 Haskell 库hindent我的编辑器的 Haskell 集成使用了它。推荐的方法是什么?

我以为stack install hindent是执行此操作的正确方法。然而,后来我想更新我的软件包,发现有没办法做到这一点。根据我找到的 GitHub 问题报告 https://github.com/commercialhaskell/stack/issues/1610#issuecomment-169253575,

stack 涉及管理项目的本地构建沙箱。它并不是一个全局包管理器。

似乎有一些解决方法,例如维护一个虚拟项目,该项目人工依赖于我想要安装的软件包。这听起来像是一个可怕的黑客,我一直无法找到任何关于实际应该采取什么方法的官方文档。

使用我的系统包管理器(Homebrew)安装 Haskell 包不是一个选项,因为它们没有打包。

我本来会针对 Stack 提出问题报告,但是贡献指南要求我在此处提出问题Haskell 堆栈 /questions/tagged/haskell-stack tag.


Well, stack install在任何项目中都会安装到~/.local/bin因此,使您安装的任何可执行文件都可以全局访问。

全局项目在没有项目的情况下运行堆栈时使用,它位于~/.stack/global-project/stack.yaml.

如果您希望所有全局可访问的工具具有相同的依赖项(也许是为了确保 ghc 版本匹配或其他),那么您可以创建一个旨在构建所有这些工具的项目。它是否是“全局项目”取决于您 - 它没有太多特别之处,如果您运行堆栈并且不在项目中,它只是默认值。

为了记录“我想要全局安装哪些 haskell 可执行文件”,您可能会考虑创建一个 shell 文件,例如

#!/bin/sh
stack install hindent

然后每当您更改已安装工具的版本时就运行它。

另外,对于像这样的工具intero需要匹配ghc版本,你可以这样做stack install --copy-compiler-tool intero,并且当堆栈与该 ghc 版本一起使用时,它将在 PATH 上可用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Stack 作为全局包管理器的推荐方法 的相关文章

随机推荐