StoneRen

跳过brew cask的api检查

Sep 04, 2025

问题

在使用brew安装应用的时候,一直卡在这里

Downloading https://formulae.brew.sh/api/cask.jws.json

采用如下方案

替换镜像

# 替换brew.git仓库
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# 替换homebrew-core.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

# 替换homebrew-cask.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git

# 更新生效
brew update

跳过检查

echo 'export HOMEBREW_NO_INSTALL_FROM_API=1' >> ~/.zshrc
echo 'export HOMEBREW_NO_AUTO_UPDATE=1' >> ~/.zshrc
source ~/.zshrc

API 模式

Homebrew 3.6 以后,安装/搜索时默认会走 API 模式(Install From API)。
这个 cask.jws.json 文件,是 Homebrew Cask 元数据 的一个签名版 JSON 文件,包含了所有 Cask 包(图形化应用,比如 Chrome、VS Code、微信等)的:

  • 名称
  • 版本
  • SHA256 校验值
  • 安装方式(zip/dmg/pkg)
  • 依赖信息
  • jws(JSON Web Signature) 说明这个 JSON 是签过名的,Homebrew 会验证它的完整性和真实性。

作用

下载这个文件的目的:

  1. 快速获取软件元数据(无需克隆整个 homebrew-cask Git 仓库)
  2. 确保内容安全(文件经过签名,防止篡改)
  3. 减少流量(相比几十 MB 的 git 仓库,这个 JSON 很小)

在 API 模式下,brew install --cask xxx 会:

  • 先下载 cask.jws.json
  • 读取你要安装的 cask 元数据
  • 再去下载软件包

跳过检查

跳过下载的方式是设置:

export HOMEBREW_NO_INSTALL_FROM_API=1

效果:

  • Homebrew 不再访问 formulae.brew.sh/api
  • 而是直接去 clone / pull 本地 Git 仓库的 homebrew-cask 来读取元数据
  • 结果是:首次更新会更慢(因为要拉取完整 Git 历史),但之后本地查找会很快
  • brew update 会同步最新的 Git 仓库,以获取最新的包定义

优缺点

优点:

  • 不依赖 formulae.brew.sh(解决你卡住的问题)。
  • 镜像可加速(USTC/TUNA 镜像可同步 cask 仓库)。

缺点:

  • Git 仓库更新量较大(homebrew-cask 几百 MB),更新速度依赖 Git 镜像质量。
  • 没有 API 模式那么轻量。
  • Homebrew 官方新功能(比如更快的搜索)部分依赖 API,跳过后某些命令可能退回旧实现,速度变慢。

总结

  • cask.jws.jsonHomebrew Cask API 模式的元数据文件,小而快,但国内访问容易卡。
  • 跳过它 不会影响安装功能,只是 Homebrew 不再用 API,而是回到本地仓库读取元数据。
  • 在国内环境,配合 国内 Git 镜像,跳过它是一个非常常用的选择。
0-PRESENT © StoneRenver:2511011029