首页 文章

建议使用Stack作为全局包管理器的方法

提问于
浏览
4

我想在全局安装一些Haskell库,例如 hindent ,它由我的编辑器的Haskell集成使用 . 建议的方法是什么?

我认为 stack install hindent 是正确的方法 . 但是,然后我想更新我的包,发现没有办法做到这一点 . 根据the GitHub issue report I found

stack涉及管理项目的本地构建沙箱 . 它不打算成为全球包管理员 .

似乎有一些解决方法,例如在我想要安装的软件包上维护一个带有人工依赖性的虚拟项目 . 这听起来像一个可怕的黑客,我一直无法找到任何正式采取的方法的官方文件 .

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

我本来会打开针对Stack的问题报告,但是贡献指南要求我在haskell-stack标签下提出问题 .

1 回答

  • 4

    好吧, 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上可用 .

相关问题