
写在前面的几句话如果你每天要在终端里敲好几遍brew update、brew upgrade看着几百个软件包在滚动日志里刷屏或者偶尔想清理一下依赖却发现brew deps --tree输出能绕晕自己那你大概率会喜欢 BrewUI 这个东西。它本质上不是一个新的包管理器而是给 Homebrew 加了一层图形化外壳让那些只有命令行才能完成的操作用鼠标点一点就能做完。这篇文章我会从项目思路、核心功能拆解、实操流程再到我踩过的坑和排查技巧完整梳理一遍希望能对正在考虑要不要给自己的工作流配上 BrewUI 的读者或者已经在用但有些细节没搞明白的朋友有点帮助。在 Mac 上装开发环境这件事Homebrew 基本是绕不开的。它管着你的 Git、Node、Python、Redis还有各种乱七八糟的命令行小工具。但 Homebrew 也有一个不那么友好的地方它把一切都藏在终端背后你不敲命令就不知道系统里到底装了些什么、哪些软件有新版本、哪些依赖已经没人用了。BrewUI 解决的就是这个问题它把 Homebrew 的信息整理成界面把高频操作变成按钮同时保留底层的灵活性。这篇文章适合所有用 Homebrew 的开发者尤其是那些不想背命令但又不想放弃 Homebrew 生态的人。1. 项目概述与整体设计思路拆解1.1 为什么有了命令行工具还要折腾一个 UI首先要说清楚一个观点BrewUI 不是要取代 Homebrew恰恰相反它是把 Homebrew 推到前台让更多人能用起来。纯命令行的问题不在于强大与否而在于信息密度和操作反馈。你执行brew list它给你吐出一长串名字你执行brew outdated它告诉你哪些软件有新版本但不会告诉你这个更新是大版本还是小版本、会不会破坏依赖。这些信息其实都存在只是没人帮你整理成一眼能看懂的样子。BrewUI 做的事情是把这些散落在各个命令里的信息收集起来重新组织成界面。你打开它左侧是分类导航中间是软件包列表右侧是详情面板顶部是搜索和操作按钮。这样整个系统里装了什么东西、哪些需要更新、哪些服务正在跑全部一目了然。这不是简单的把命令翻译成按钮而是信息架构的重新设计。在我看来BrewUI 的设计哲学可以概括为一句话高频操作做减法复杂操作做引导。安装、更新、卸载、清理这些天天要点的操作必须做到两步之内完成。依赖分析、服务管理这类容易出错的操作用可视化方式呈现减少误操作的风险。真正冷门或者高度定制化的操作还是老老实实回到终端UI 不拦你。这个取舍非常关键很多类似的图形化工具栽就栽在想用 UI 封住一切结果反而把简单的事搞复杂了。1.2 BrewUI 的核心设计原则不替代、不屏蔽、不折腾先说不替代BrewUI 的所有操作底层调用的还是 Homebrew 的命令它只是帮你组装命令、解析输出、渲染结果。这意味着终端里能做的事理论上 UI 都能做反过来 UI 没覆盖到的功能你随时可以打开终端手动执行两者互不干扰。再说不屏蔽很多 GUI 工具喜欢把细节藏起来让用户有一种一切尽在掌控的错觉但出了问题又什么信息都不给。BrewUI 的做法是保留日志面板每次操作都会展示实时输出你点了一下 Update All背后跑的是brew upgrade每一步在干什么、哪个包失败了、失败原因是什么日志里都写得清清楚楚。这个设计在我实际使用中帮了大忙很多看似莫名其妙的安装失败看一眼日志就定位了。最后是不折腾安装 BrewUI 的过程本身很简单不需要翻文档也没有一堆前置依赖。装完之后它会自动读取本机已有的 Homebrew 环境包括已安装的 formulae、casks、taps以及正在运行的 services不会要求你从零开始重新整理环境。整个迁移成本几乎为零这也是我敢认真推荐它的原因。2. 核心功能拆解与关键概念2.1 一眼看懂 BrewUI 的界面与功能布局BrewUI 的主界面按功能区分为四块我实际用下来觉得它的布局逻辑很符合直觉。左侧是导航区列出了几个主要入口已安装、可更新、搜索、服务、清理还有一些按 tap 来源分类的管理视图。这里有个细节做得很好已安装列表默认按名称排序但你可以在右上角切换成按大小排序或者按最近安装时间排序。对经常要在多台机器间整理环境的开发者来说按时间排序能很快找到刚装了啥、该在别的机器上补装啥。中间是主列表区每一行显示一个软件包关键信息包括名称、当前版本、最新版本如果有更新的话、安装状态、所属 tap 源、软件类型formula 还是 cask。列表支持多选你可以勾选多个包然后批量操作。这种批量操作在终端里要写循环脚本在 UI 里就是勾选加点击的事。右侧是详情面板选中某个包之后这里会展示完整信息描述、许可证、依赖关系、反向依赖也就是谁依赖它、安装路径、下载统计、仓库主页、配置选项等。最实用的是依赖关系图它会以树形结构展示你这个包依赖了什么以及它被哪些包依赖。在决定要不要卸载某个包之前看这个图比在终端里连敲三个brew deps命令直观得多。顶部是操作栏和搜索框。操作栏会根据当前选中项动态变化——你选了已安装的包出现的是更新卸载打开源码目录你在搜索结果里选了未安装的包出现的是安装查看公式详情。搜索框支持模糊搜索和正则搜索而且能同时搜 formulae 和 casks用 tab 键可以在两类结果之间切换。2.2 必须搞懂的四个底层概念Formulae、Casks、Taps、ServicesBrewUI 把 Homebrew 的四个核心抽象做成了界面入口很多人用命令行用了半年还是一知半解看完 UI 反而明白了。我在这里一并解释清楚。Formulae公式是 Homebrew 的核心包格式描述了一个开源软件的下载地址、依赖关系、编译配置和安装步骤。用 UI 里的一句话来理解凡是装进/opt/homebrew/或者/usr/local/目录的命令行工具基本都是 formula。比如 Git、Python、nginx、ffmpeg这些属于 formula。BrewUI 在展示 formula 时特别标注了安装方式有的用预编译的 bottle有的需要源码编译如果需要编译UI 会提示预计耗时和依赖情况。Casks酒桶Homebrew 的幽默则是专门用来安装 macOS 原生应用的格式比如 Chrome、VS Code、Docker Desktop 这类带图标的 .app 应用。Cask 的关键在于它不只是把应用文件拷贝进来还会处理应用签名、关联文件、启动器注册这些事情。BrewUI 在列表里把 formula 和 cask 做了清晰的视觉区分装之前你就能判断这个包装完之后是在终端里跑还是会出现在启动台里。Taps仓库可以理解成第三方软件源。Homebrew 官方仓库之外还有很多社区维护的 tap比如homebrew/cask-fonts用来安装字体homebrew/services用来管理后台服务。BrewUI 里可以通过简单的表单添加 tap不用自己敲brew tap命令往源里加 URL。但我要提醒一句第三方 tap 的安全性参差不齐我一般只添加官方维护或者社区口碑很好的 tap这个习惯在 UI 里也同样适用。Services 是 Homebrew 内置的服务管理能力通过brew services命令可以启动、停止、重启 MySQL、PostgreSQL、Redis 这些常驻后台的软件。BrewUI 把它们集中放到服务页签每个服务有一个开关按钮旁边显示运行状态、启动时间和日志路径。这个页面用起来非常顺手特别是要同时管理多个数据库服务的时候鼠标一拉就能全部重启比一个个敲命令强太多。3. 实操全流程从安装到日常维护3.1 安装 BrewUI 与第一次启动配置BrewUI 的安装方式很灵活如果你已经装了 Homebrew最省事的方法是用 Homebrew 自己来装brew install --cask brewui如果你不想走 Homebrew也可以直接从项目的 GitHub Releases 页面下载 zip 包解压之后把 BrewUI.app 拖入 Applications 目录即可。第一次启动时系统会提示是否允许打开从互联网下载的应用在系统设置-隐私与安全性里选择仍要打开就行。用brew install --cask方式安装的话这个提示一般不会出现因为 Homebrew 已经帮它做了 quarantine 属性的处理。首次启动之后BrewUI 会做几件事检测 Homebrew 是否安装、读取已安装的软件清单、扫描服务列表、检查是否有可用更新。这个过程在配置好镜像源的机器上一般几秒钟完成如果网络比较慢或者包特别多可能需要十几秒。界面底部会有一个进度提示不用管它等它跑完就行。有一个初始化设置建议手动确认一下打开偏好设置-通用看看默认终端是否为你的常用终端iTerm2 或 Terminal。这个设置决定了你点击打开源码目录在终端中执行命令这类操作时调用的是哪个终端应用。BrewUI 的很多高级入口其实就是把命令拼好之后扔给终端执行所以这里设置对了之后会顺滑很多。提示如果你是第一次在 Mac 上配开发环境还没装 HomebrewBrewUI 的安装向导里也提供了 Homebrew 的自动安装选项点一下按钮它会在后台帮你装好然后自动进入主界面。这类用户往往是初学者省去了在终端里手动安装的恐惧感。3.2 高频操作实录搜索、安装、升级、卸载搜索和安装是我用得最多的功能流程非常简单顶上搜索框输入关键词比如redis回车之后结果列表会同时展示 formula 和 cask 两类匹配项。用 Cmd数字键还可以快速切换筛选条件。选定你要装的包右侧详情面板会显示仓库地址、依赖项、最近版本号等信息。确认之后点安装BrewUI 会弹出一个小窗口显示的是brew install redis这个实际命令以及它的实时输出。你如果仔细看会发现UI 背后做了一些聪明的事如果目标包有 bottle它会自动加上--no-quarantine参数来避免 macOS 的 Gatekeeper 拦截如果是源码编译安装它会加上--verbose让你能看到配置阶段的详细输出方便排查问题。安装完成之后状态栏会自动刷新列表里新装的包会出现在已安装页签下。这里有个体验细节值得夸一下brew install完成之后终端会提示你某条路径需要加到 PATH 里BrewUI 会在界面顶部弹一条横幅写清楚redis 已安装你可以执行 redis-server 启动启动脚本位于 /opt/homebrew/opt/redis/bin。这个提示对新手很友好不用再去翻安装日志。批量升级的操作也很顺畅切到可更新页签整个系统里所有可升级的包都会列出来默认全选。你可以单点某个包旁边的更新按钮只升级它也可以直接点左上角的全部更新然后在确认窗口里选择是执行brew upgrade还是保守一点的brew upgrade --greedy。关于--greedy多说一句Homebrew 默认不会升级那些带latest标记或者开发版本比如mysql8.0、homebrew/cask-versions里的一些包但--greedy会强制全部尝试升级。日常使用我建议普通升级就好只有明确知道自己需要用最新版的时候才开--greedy不然容易碰到兼容性回退的问题。卸载和清理也都在 UI 里直接做了。卸载会执行brew uninstall 包名如果有依赖它的包UI 会弹出依赖关系图提示你风险。清理页签对应的是brew cleanup它可以删除旧的软件包版本和下载缓存BrewUI 还会额外展示当前缓存占用空间点一下立即清理就能释放磁盘空间我实测第一次清理的时候给我腾出了将近 3GB 的空间属实惊讶。3.3 服务管理、依赖关系与批量操作进阶BrewUI 的服务管理页签是我个人最喜欢的部分。它对应的底层命令是brew services list但做成开关之后直观太多了。装完 MySQL、Redis、Nginx 这些常驻服务之后切到服务页签列表里会显示每个服务的运行状态绿色圆点表示正在运行灰色表示已停止黄色表示启动中或退出不干净。点击状态开关就可以启动或停止服务右键点击服务名还能选择以服务方式启动开机自启还是仅本次启动不会注册为登录项。这里有个实操经验如果你用 Docker 给的命令直接跑docker run redis这种那服务和 BrewUI 没多大关系。但如果你用brew install redis装的是本机原生 Redis又希望它开机自动运行在服务列表里把开关打开BrewUI 实际上会帮你注册一个 launchd 启动项。之后即使不到 UI 里操作系统重启之后服务也会自动起来。这个我之前整了好几个月才搞明白在 UI 里一个开关就搞定了。服务日志的入口也很隐蔽但很好用在服务列表里双击某个服务名会展开日志面板实时显示日志文件尾部内容。排查启动失败问题时不用再手动敲tail -f /opt/homebrew/var/log/mysql/error.log了UI 直接替你找到了对应的日志路径。依赖关系的可视化是我另一个高频使用的功能。在详情面板的依赖标签页里BrewUI 会画一棵依赖树根节点是当前包叶子节点是它需要的底层库。你可以展开每一层看看具体是哪个库被引入了。如果你准备卸载一个大包UI 会先检查反向依赖如果有其他包仍在依赖它会给出警告而不是直接让你卸载。这个保护机制比命令行的裸卸命令稳妥很多我以前在终端里直接卸过某个底层库结果连带搞坏了两个工具重装花了不少时间。批量操作上BrewUI 也做了一些很符合直觉的设计。你可以在已安装列表里按住 Cmd 键多选几个包然后点导出清单它会生成一个文本文件列出这些包的名字和版本。反过来也能导入清单自动把缺失的包安装回来。换新电脑或者维护多台开发机的时候这个功能非常有用本质上就是帮你做了一次brew bundle的迁移但操作起来比brew bundle dump的效率高很多。4. 实操心得与典型问题排查4.1 为什么我最终决定在日常工作中引入 BrewUI平心而论一开始我对这类给命令行套壳的工具有点不屑总觉得多此一举。但真正用了几周之后我发现自己回不去了。主要原因倒不是省了多少敲命令的时间而是它把我与 Homebrew 之间的信息交互方式彻底变了。以前的流程是先brew list看看有什么、brew outdated看更新、brew deps --tree看依赖、brew services | column -t看服务状态每条命令的输出格式都不同脑子里要拼一个完整画面。BrewUI 把这些散落的信息统一成一张仪表盘我只需要扫一眼就知道当前系统的健康状态。对于要管理多台开发机、经常处理复杂依赖关系的开发者来说这种全局概览的价值甚至超过操作本身。另一个意外的收获是BrewUI 帮我改掉了乱卸包的坏习惯。以前在终端里brew uninstall一个包毫无心理负担反正命令好敲。现在看到 UI 里清晰的依赖关系树才发现有些包虽然自己不用了但正在被别的项目依赖。卸载之前先看依赖图能避免不少让人头大的环境修复工程。4.2 状态不同步、权限不足、网络超时与服务失败四个高频问题速查再顺手的工具实际用起来也难免碰到问题。我整理了自己踩过和亲眼见过的几类高频故障做成一个速查表。问题现象可能原因解决思路UI 列表状态和终端不一致BrewUI 缓存过期或 Homebrew 被外部修改在偏好设置-通用里点立即刷新缓存或重启 BrewUI安装时报 Operation not permittedmacOS 权限问题可能目录属主不对检查目录权限必要时执行sudo chown -R $(whoami) /opt/homebrew修复属主搜索或更新卡住进度条不动默认源访问不稳定配置国内镜像源设置 HOMEBREW_API_DOMAIN、HOMEBREW_BOTTLE_DOMAIN减少访问延迟服务启动后秒退UI 显示运行中但实际已退出服务自身配置错误或端口冲突查看服务日志路径检查端口占用用lsof -i :端口排查冲突进程这几个问题里面权限问题的出现频率最高。Mac 从 Catalina 开始把系统分区和数据分区分离了很多开发者早期装 Homebrew 的时候目录权限就有点乱后来升级 Apple Silicon 换了/opt/homebrew又会遇到新问题。BrewUI 在这些场景下的报错信息已经比终端友好不少但根本解决办法还得靠修复目录属主和排查服务日志。网络相关的排查要特别提醒一点如果你配置了镜像源BrewUI 有时不会立刻感知环境变量的变化。这时需要在偏好设置-高级里重新拉取公式索引或者干脆重启一次 BrewUI。在我实际使用中环境变量改完之后重启 BrewUI 是最快最有效的解决路径很多 UI 卡顿和超时问题都会随着这次重启一并消失。4.3 让 BrewUI 更契合个人习惯的几类配置选项BrewUI 不是那种装完即走的工具真正用好它需要花点时间按自己的习惯调一下配置。这里按我认为的重要程度排序讲三个最实用的。第一个是自动检查更新开关。默认情况下 BrewUI 每隔 6 小时会跑一次brew update刷新公式索引。这本来没什么但在网络不稳定的环境里后台更新可能拖慢整个系统而且会触发 Homebrew 的自动加锁让你在终端里手动执行命令时偶尔碰到 Waiting for another brew process。我个人的做法是关掉自动检查改成每天到办公室之后手动点一次刷新。省资源也不容易遇到并发锁。第二个是操作后自动刷新选项。打开之后任何一个安装或卸载操作完成界面会自动回到最新状态不需要手动刷新。看起来是个小功能但实际体验差别很大尤其是连续装好几个软件包的时候打开自动刷新能让节奏顺畅很多。如果关掉每完成一个操作都要点一下刷新按钮次数多了会有点烦。第三个是日志保留策略。默认日志会保存在~/Library/Logs/BrewUI/目录按日期归档。如果你有排查历史问题的需求建议把日志级别从 Info 调到 Debug这样每次安装失败时能在日志里看到更详细的错误堆栈。日志文件占空间不大Debug 级别跑一个月也就几十 MB量级上完全可接受。注意调整这些配置之后建议通过偏好设置-高级-运行诊断跑一次环境检查。它会输出当前 Homebrew 版本、路径、写入权限、网络连接状态等信息并且和 BrewUI 内部的运行环境做比对一旦发现不一致就会给出提示。我第一次在一台新机器上跑的时候它帮我发现 Python 路径指向了系统自带版本而不是 Homebrew 版本省去了后续一堆麻烦。4.4 从 BrewUI 看这类工具的设计边界用了一段时间之后我对 BrewUI 也有了更深的理解尤其是它在图形界面和命令行之间划定的那条界线。Homebrew 本身是个功能极其繁多的生态有 formulae、casks、taps、services、开发者 API、自动更新策略。如果一个 UI 想把所有东西都做成可视化最后产物必然臃肿不堪反而丢失了命令行工具小而美的本质。BrewUI 的选择是覆盖 80% 的高频操作剩下 20% 的深度操作用复制命令到终端的方式来保留。搜索安装升级清理服务管理这些高频需求做得很出色依赖关系分析和日志查看也超出预期但那些真正复杂的场景比如自定义 formula 的编写、本地开发 tap 的管理、深度调优 Homebrew API 的设置坦白说 UI 目前覆盖不到也不建议强行覆盖。这套设计思路很值得借鉴。好的工具不是把所有事都做完而是把体验边界划清楚让用户知道什么时候该在三秒内点按钮什么时候该打开终端亲自动手。BrewUI 在这一点上做得非常克制这也是我愿意持续使用它而不是换成别的替代品的最主要原因。5. 常见问题与排查技巧实录5.1 问题一UI 显示已安装终端里却找不到命令这个问题我碰到过好几次尤其在用了很长一段时间 Homebrew 之后PATH 环境变量变得不太干净的情况。BrewUI 显示已安装说明 Homebrew 数据库里有这个包但终端里敲命令提示 command not found原因大概率是安装路径没有加入 PATH。Homebrew 在 Apple Silicon 机器上的公式安装到/opt/homebrew/opt/包/bin真正可执行的二进制不一定在默认路径里。终端里跑一下echo $PATH看看有没有/opt/homebrew/bin如果不在需要把它加到 shell 的配置文件里。BrewUI 在详情面板上给了一个复制安装路径的小按钮点一下就把安装路径复制到剪贴板可以直接粘到.zshrc里。如果确认 PATH 没问题但命令还是找不到就要看是不是装了带版本前缀的 formula比如mysql8.0——这类公式安装的二进制名可能带年份或版本号在/opt/homebrew/opt/mysql8.0/bin/mysql下面而不是直接暴露在/opt/homebrew/bin里。5.2 问题二安装过程中出现依赖冲突Homebrew 对依赖冲突的处理算是比较严格的一旦出现终端里往往是一条红色报错加一堆提示。BrewUI 遇到这种情况会在 UI 界面弹出一个冲突预览窗口列出冲突的包名、版本、以及两者各自的依赖路径。这里的核心规则是绝大多数冲突都来自手动强制安装某个包或者混用了不同版本来源。官方推荐的方案是用brew uninstall 冲突包 --force移除多余版本然后重新安装目标包。如果你不确定该卸载哪个可以把两个冲突包都打印出来在详情面板里比较它们的下载来源和查看次数一般官方仓库版本优先级高于第三方 tap 版本新版本优先级高于旧版本。我踩过的一个具体坑是过几年项目需要兼容旧的 Ruby 版本我手动通过源码装了一个老版本 Ruby结果和 Homebrew 管理的 Ruby 起了冲突。最后的解决方式是在 BrewUI 里把源码安装的 Ruby移除卸载改用rbenv管理版本这样 Homebrew 的 Ruby 版本就独立了互相不干扰。这类问题之所以反复出现根源往往是个人机上同时存在两套软件管理逻辑BrewUI 只是在诊断阶段帮你把冲突看清楚真正的修复策略还是要靠维护者自己想明白。5.3 问题三服务管理页签的启动按钮没反应服务管理算 BrewUI 里最实用也最容易出问题的模块。点击启动按钮没反应原因非常多样我按出现频率排序整理过一番。最常见的原因是端口被占用。BrewUI 界面上没有直接显示端口号需要点进服务详情查看配置然后用lsof -i :端口查找是哪个进程占用了端口。其次是路径问题比如数据库中某些目录的属主不对MySQL 启动时要写数据文件却写不进去自然启动失败。这种情况在日志里会体现得很明确通常是Permission denied或者Cant create/write to file。还有一类比较隐蔽的问题是 launchd 配置残留。如果你之前用命令行的brew services启动过某个服务后来又从 UI 里关闭但 launchd plist 没删干净再次启动时会提示 service already loaded。处理方式是在服务页签里选定该服务使用移除服务文件功能然后在系统设置-通用-登录项里检查有没有已禁用的相关条目清理后再启动就正常了。提示排查服务启动失败第一步永远是看日志。BrewUI 双击服务名称就能直接打开日志面板看到具体的报错内容再根据报错内容去搜索解决方案。大多数时候刚才提到的端口占用和权限问题都会在日志里直接反映出来不用盲猜。5.4 问题四数据库升级后服务无法启动这类问题在升级大版本时几乎必然遇到。以 MySQL 为例从 5.7 升到 8.0数据目录格式不兼容服务启动就会直接报错。BrewUI 在升级 cask 时如果检测到服务正在运行会弹窗询问是否在升级完成后尝试重启服务。我刚开始不太在意这个弹窗后来发现这就是在提醒你升级前后服务状态可能会坏掉。遇到这种问题BrewUI 的日志面板没法直接帮你修复因为这是软件内部升级带来的结构变更。我通常的做法是先备份旧数据比如 MySQL 的完整数据目录然后使用 UI 中的重置数据目录选项高级设置里能找到这个操作会执行brew postinstall并重新初始化数据结构最后重新启动服务把备份数据导入。这里要特别提醒一句重置数据目录不可逆执行之前一定要确认备份完好。BrewUI 默认在重置前会要求输入reset确认这个设计很好但你自己也要有主动备份意识。在我的工作流里执行这种高风险操作之前会手动复制整个数据目录到外部磁盘保险系数直接拉满。5.5 问题五缓存占用空间持续膨胀Homebrew 会为每次下载的软件包保留缓存位置在~/Library/Caches/Homebrew。由于升级频率高、包体积大这个目录很容易膨胀到几个 GB。BrewUI 的清理页签会统计这部分体积点击清理后能立即释放空间。不过如果你发现清理完没几天缓存又涨回来可能不是缓存本身的问题而是 Homebrew 的自动更新机制每次都会把更新的包下载到本地。这种情况下可以在偏好设置-通用里把自动更新频率从每次打开改成手动然后适当延长缓存清理周期。我自己的习惯是每个月月底集中做一次大的清理动作顺便把旧版本删除能始终保持缓存占用在一个可接受范围内。如果你有更高的磁盘空间需求还可以在偏好设置里把缓存目录迁移到外置硬盘。这个功能我是后面才发现的在高级-缓存位置里直接指定一个外部路径BrewUI 会把已有的缓存文件移动过去。对于笔记本硬盘空间紧张的用户来说这是个非常实用的隐藏功能。6. 写在最后的个人体会BrewUI 用到现在最大的体会是信息可视化带来的掌控感。在没有它之前我对 Homebrew 里到底装了什么、有多少包是可以清理的、哪些服务的开机自启状态是异常的其实心中没底。有了 BrewUI 之后这些问题变成了一目了然的界面。它也有一些不完美的地方比如极个别公式的依赖图显示得不够完整偶尔需要自己再去终端里追查服务日志面板在日志量大时滚动稍有卡顿。但总体而言它把 Homebrew 的使用门槛降低了很多同时又没有牺牲底层工具的灵活性。如果你和我一样日常工作中离不开 Homebrew还在为命令行里的信息碎片烦恼花半个小时装上 BrewUI配置好镜像源和自动刷新大概率会打开一扇新大门。最后再分享一个小技巧BrewUI 的导出清单功能加上 Homebrew 自带的brew bundle可以用来做一次完整的迁移。先导出清单在另一台机器上导入再执行brew bundle补充剩余的配置项两台机器的环境就能做到高度一致。这个方法我已经用了快半年配合 BrewUI 的可视化操作确实让换机和新同事入职配置环境变得省心多了。