Homebrew

Homebrew 是个让人头疼的存在。

目前它已经接近是 macOS 上的包管理事实标准,但它本身的一些功能和特性跟又传统的包管理工具出入实在是太大。一部分的原因是开发者激进甚至偏执的风格,另一方面是它一开始并不是作为一个全功能的包管理工具来设计,很多功能是在漫长的开发者和用户的磨合中加进去的。

总之现状就是:一、不得不用。终端用户不说,在很多 CI 上 Homebrew 就是唯一的选择。二、90% 的时候用着还算方便,但就那 10% 的时候,能折腾死你…

1 安装

安装到默认目录 /usr/local/ 下官方推荐的安装方式:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

虽然我并不喜欢这种远程下载一个脚本盲安装的动作。

需要试验一些包或者给某个项目保持一个独立的依赖环境的话,安装到一个制定目录下是很方便的方法:

mkdir homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

2 清理

2.1 方案一,Homebrew bundle

Homebrew bundle 是一套类似于 ruby bundle 的管理方法。核心的思路是把当前的状态 dump 下来,保存在一个文件 (Brewfile) 中,后续的重新安装和清理都可以根据这个文件一键完成。

几个常规的操作:

  1. 设置 Brewfile 默认的话 brew bundle 命令会在当前目录下生成 Brewfile,用这个环境变量 HOMEBREW_BUNDLE_FILE 可以指定一个文件,我根据机器不同,保存在 Dropbox 中或者HOME 目录下。

    if [[ -d $HOME/Dropbox ]]; then
      export HOMEBREW_BUNDLE_FILE=$HOME/Dropbox/config/${HOST/.*/}.Brewfile
    else
      export HOMEBREW_BUNDLE_FILE=$HOME/.Brewfile
    fi
    

    brew bundle dump 可以记录下目前已经安装的包,=-f= 选项可以写入已经存在的 Brewfile。另外也可以手动改 Brewfile,格式参考 brew bundle 的文档。

  2. 常规清理
    • brew bundle cleanup 命令会列出需要清理的内容
    • brew bundle cleanup --force 命令执行清理操作
  3. 彻底清理
    • brew uninstall --force $(brew list) 删除所有已安装的包
    • brew bundle 从 Brewfile 安装

2.2 方案二,=autoremove=

brew autoremove 命令清理。这个命令顾名思义是删除不是用户主动安装也没有被依赖的包。这个本来应该一开始就存在的功能一直到最近才加进来。

不过 autoremove 这个功能很多包管理系统做了很多年都没有做得很好,=brew autoremove= 的可靠性我觉得还得观望一下。

Author: sinxccc

Created: 2021-01-19 Tue 11:56