You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:27:00