使用 brew install 命令安装某些 cask 软件时,可以省略 cask 关键字,直接 brew install yaak 也能安装成功。
但在使用 brew bundle 命令时,必须在 Brewfile 中明确指定 cask 关键字:
# 正确写法
cask "yaak"
# 错误写法,会报错
brew "yaak"
原因:brew bundle 解析 Brewfile 时需要明确区分安装类型,而命令行 brew install 有自动检测能力。
3 notes found.
使用 brew install 命令安装某些 cask 软件时,可以省略 cask 关键字,直接 brew install yaak 也能安装成功。
但在使用 brew bundle 命令时,必须在 Brewfile 中明确指定 cask 关键字:
# 正确写法
cask "yaak"
# 错误写法,会报错
brew "yaak"
原因:brew bundle 解析 Brewfile 时需要明确区分安装类型,而命令行 brew install 有自动检测能力。
Formula 用于从源码编译,Cask 用于分发预编译二进制。
Homebrew 团队希望统一 CLI 和 GUI 的安装体验,推动 brew install 作为唯一入口。因此 GoReleaser 官方推荐使用 Cask:
何时用 Cask:Go CLI 工具官方通常提供预编译二进制。
何时用 Formula:上游只提供源码、需要编译定制、或依赖本地库的软件。
自定义 tap 可同时包含两者:
# Formula
brew install zhaochunqi/homebrew-tap/<tool>
# Cask
brew install --cask zhaochunqi/homebrew-tap/<tool>
通过 homebrew-tap,可以让自己的项目通过 brew install 直接安装。
brew install zhaochunqi/tap/git-open
homebrew-<tap-name>,例如 homebrew-tapFormula/<formula-name>.rb 文件⚠️ 注意: Homebrew 官方不提倡在 Formula 中分发预编译二进制,这被认为是不好的实践。对于 Go CLI 工具等提供预编译二进制的项目,推荐使用 Homebrew Cask 进行分发。参考 Go CLI 工具更适合通过 Homebrew Cask 分发预编译二进制。
class GitOpen < Formula
desc "Open your git repo in browser using one command"
homepage "https://github.com/zhaochunqi/git-open"
version "2.2.1"
on_macos do
on_arm do
url "https://github.com/zhaochunqi/git-open/releases/download/v2.2.1/git-open_Darwin_arm64.tar.gz"
sha256 "9b653ba97f5095e8764f43eeb9ab0e46d01f4bbd14eadd51760b636512812a8c"
end
on_intel do
url "https://github.com/zhaochunqi/git-open/releases/download/v2.2.1/git-open_Darwin_x86_64.tar.gz"
sha256 "ab24e6fe8a49b6f526a785a94a10b56a139430f795346d30f8a5a5db1387223d"
end
end
on_linux do
on_arm64 do
url "https://github.com/zhaochunqi/git-open/releases/download/v2.2.1/git-open_Linux_arm64.tar.gz"
sha256 "8776da29b63a21f0949cda1814e30cc2c926bb6dee4199a9f7f0684486671c70"
end
on_x86_64 do
url "https://github.com/zhaochunqi/git-open/releases/download/v2.2.1/git-open_Linux_x86_64.tar.gz"
sha256 "cf91815149c341d718ea7b26d5d671e261bb8a5701e2de2da803d9a5a6c278c4"
end
end
def install
bin.install "git-open"
end
test do
system "#{bin}/git-open", "--version"
end
end