Haskell Stack 2.1.1配置清华镜像遇错,求正确配置方案
我来帮你搞定这个Stack镜像配置的问题——你遇到的root.json反序列化错误和快照解析失败,大概率是配置格式不对或者镜像地址的用法有误。下面是经过验证的完整配置步骤,能让Stack完全切换到清华的Hackage/Stackage镜像:
正确配置清华镜像的完整步骤
1. 全局配置文件(~/.stack/config.yml)的正确写法
YAML格式对缩进和语法要求严格,之前的反序列化错误很可能是格式问题。请用以下配置覆盖你的全局config.yml(注意用2个空格缩进,不要用Tab):
# ~/.stack/config.yml # 配置Hackage镜像 package-indices: - name: Tsinghua Hackage download-prefix: https://mirrors.tuna.tsinghua.edu.cn/hackage/package/ http: https://mirrors.tuna.tsinghua.edu.cn/hackage/00-index.tar.gz # 保留你已配置好的GHC下载镜像 setup-info: ghc: urls: "https://downloads.haskell.org/~ghc/{version}/ghc-{version}-{platform}.tar.xz": - https://mirrors.tuna.tsinghua.edu.cn/ghc/{version}/ghc-{version}-{platform}.tar.xz # 配置Stackage快照镜像(核心解决快照解析错误) stack-setup-url: https://mirrors.tuna.tsinghua.edu.cn/stackage/stack-setup.yaml stackage-mirror: url: https://mirrors.tuna.tsinghua.edu.cn/stackage/ secure: true # 可选:指定默认的resolver版本(换成你常用的即可) resolver: lts-20.25
关键配置说明:
package-indices:指定Hackage的包索引和单个包的下载路径,完全替换默认的Hackage地址stackage-mirror&stack-setup-url:这两个字段会让Stack从清华镜像拉取Stackage快照元数据,而不是默认的AWS地址,解决你之前的快照解析错误- 不要直接把resolver写成镜像文件的URL,Stack需要的是快照名称(如
lts-20.25),它会自动通过镜像地址匹配对应的快照文件
2. 项目级stack.yaml的简化配置
项目里的stack.yaml不需要修改resolver的URL,保持原来的快照名称即可,比如:
# 项目的stack.yaml resolver: lts-20.25 # 和全局配置的版本一致,或使用你需要的版本 # 其他原有配置(如packages、extra-deps等)保持不变
Stack会自动读取全局配置里的镜像地址,去清华镜像拉取该快照的所有信息。
3. 修复常见错误的小技巧
- root.json反序列化错误:删除旧的
~/.stack缓存目录,然后重新执行stack setup,避免旧缓存和新配置冲突;同时检查config.yml的缩进是否正确,冒号后必须加空格 - 快照解析错误:确保没有在项目stack.yaml里把resolver写成镜像文件的直接链接,必须用标准的快照名称(如
lts-x.x或nightly-xxxxxx)
4. 验证配置生效
执行以下命令确认镜像是否正常工作:
stack update:观察日志,确认包索引从清华Hackage镜像下载stack build:检查包的下载地址是否指向清华镜像域名stack setup:确认GHC仍从清华镜像下载(你之前已经配置成功)
内容的提问来源于stack exchange,提问作者LogicChains
相关产品推荐
相关产品推荐

