如何通过Stack本地安装Hackage包供stack runhaskell使用?
最简单的方案:使用Stack的脚本模式(Script Mode)
我刚好有过类似的需求,Stack自带的脚本模式完美解决了这个问题——它既允许你显式声明依赖,又不用创建完整的Cabal项目,完全适配stack runhaskell的工作流。
具体操作非常简单:
- 在你的脚本文件(比如
one-of-the-scripts.hs)最顶部添加两行特殊注释,用来告诉Stack需要的依赖:
#!/usr/bin/env stack -- stack script --package regex-posix
- 接下来正常写你的Haskell代码就行,包括
import Text.Regex.Posix这类依赖导入。
之后运行脚本的方式和你之前想的一样:
stack runhaskell one-of-the-scripts.hs
如果你的脚本需要多个Hackage包,只要在--package后面用空格分隔添加即可,比如:
-- stack script --package regex-posix --package text --package containers
额外的实用技巧
- 如果你想固定GHC版本和依赖版本,避免不同环境下的兼容性问题,可以加上指定解析器的参数:
-- stack script --resolver lts-20.10 --package regex-posix
(lts-20.10是一个示例版本,你可以换成适合自己的LTS版本)
- 给脚本添加执行权限后(
chmod +x one-of-the-scripts.hs),甚至可以直接用./one-of-the-scripts.hs运行,不需要每次敲stack runhaskell。
这个方案完全满足你的需求:依赖显式写在脚本里,不用额外配置文件,全程用Stack,不用切换到Cabal,第一次运行时Stack会自动下载并安装所需的依赖,之后再运行就快很多了。
内容的提问来源于stack exchange,提问作者LudvigH
相关产品推荐
相关产品推荐

