多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

BrewUI 图形界面实战:让 Homebrew 包管理告别命令行门槛

BrewUI 图形界面实战:让 Homebrew 包管理告别命令行门槛 我是在 macOS 上重度依赖 Homebrew 干活的人换新电脑第一件事永远是装 Homebrew然后再装一堆 formula 和 cask。可这些年用下来我始终有个感受Homebrew 本身够强但它那套命令行交互放在零基础同事想装个软件我想快速看哪些包能升级这些场景里实在谈不上友好。BrewUI 这个项目进入视野之后让我重新思考了一件事——包管理器到底需不需要一个图形界面先说结论需要而且 BrewUI 做的不是把终端搬进窗口而是把包管理里面的高频操作重构成了看一眼、点一下的流程。适合不熟悉命令行的开发者、刚接触 macOS 的新用户也适合像我这种懒人日常管理依赖时能少敲几个命令少记一堆参数。这篇文章会把 BrewUI 的定位、功能拆解、安装配置、实操过程和踩坑经验完整梳理一遍。1. 为什么命令行包管理需要一个图形界面1.1 Homebrew 很强但使用门槛不低Homebrew 的强大毋庸置疑它把 macOS 上散落的编译依赖、二进制包、应用安装统一到了一套体系里。安装软件时 brew install 一条命令背后帮你处理好下载、依赖、路径、链接等等一系列操作这种体验在十年前几乎不可想象。但问题也很明显。终端里的信息密度太高了新手一打开 brew search 返回的可能几百上千条结果靠肉眼去分辨哪些是官方仓库、哪些是第三方 tap、哪些是已被弃用的包非常费劲。而且 Homebrew 的很多操作是有依赖序的装 A 之前得先装 B升级 C 时可能会连带升级 D这些关系在命令行里只有当你执行到一半才会通过日志看到。你问 Homebrew 它有哪些包可以升级它能回答但不会主动告诉你这个新版本可能不兼容你当前的配置。我见过不少同事对着 brew install nginx 这类命令无从下手因为搞不清自己缺什么依赖、要不要先执行 brew update、装完后怎么启动服务。BrewUI 这类工具存在的价值恰恰是把这些需要经验才能搞定的潜规则通过界面和状态标注变成显性的信息。1.2 BrewUI 不是替代品而是补齐短板这里必须先说清楚一个定位BrewUI 并不是要取代 Homebrew 命令行它更像是一层封装层或前端。底层该走的流程还是 brew update、brew install、brew upgrade 这些原生命令BrewUI 只是用更直观的方式帮你组织和触发它们。我理解这个项目的核心设计思路是高频操作可视化、低频操作留终端。对大多数用户来说日常使用中 80% 的行为集中在搜索、安装、升级、卸载、清理这几个动作上这些动作完全可以通过图形界面做得比命令行更友好。而像 brew bundle dump、brew tap-new 这类调试或自定义开发场景界面上做反而复杂保留给终端更合理。所以 BrewUI 比较好的姿势是它把选择哪个包、确认版本、执行操作这个链路缩短成点选和按钮但不会替你做决定。它给你的不是魔法而是可见的确定性——装之前能看到依赖关系升级之前能看到涉及哪些包清理之前能看到回收多少空间。1.3 技术实现上绕不开的几个关键点从实现角度看BrewUI 要稳定工作得解决三个问题。第一数据的获取。Homebrew 提供了 --jsonv2 输出格式可以一次性导出 formula 和 cask 的详细信息包括版本、依赖、描述、冲突项等。BrewUI 应该主要依赖这个输出来构建包列表和详情页而不是去解析不给任何格式保证的纯文本输出。第二命令的执行。所有安装、升级、卸载操作本质上是调用 brew 命令。这里要注意GUI 进程的环境变量经常和终端不一样特别容易出现 brew: command not found所以工具必须在启动时主动探测 Homebrew 的安装路径默认要同时兼容 Apple Silicon/opt/homebrew/bin/brew和 Intel/usr/local/bin/brew两类机器。第三状态的同步。Homebrew 的状态是动态的安装一个包之后包列表、依赖关系、已安装标记都会变化。如果界面不做刷新或者状态缓存失效很容易出现我明明装完了界面上还是显示未安装的错觉。BrewUI 在这块的策略应该是每次操作后主动重新拉取 JSON 数据而不是依赖上一次的缓存。2. 核心功能拆解与使用要点2.1 软件包浏览与搜索从记名字到看分类命令行里搜索软件包本质上是字符串匹配你得先知道一个大概的名字才能搜。BrewUI 最大的体验变化就是把这个逻辑改成了浏览 筛选。我试着在 BrewUI 里找之前用过的一个图像处理工具如果靠终端我得回忆它到底叫 imagemagick 还是 graphicsmagick。在界面里我只需要切到 Formula 分类然后按关键词 image 过滤再结合描述列看一眼哪个是图像处理很快就能锁定目标。这个体验对记不住包名的人非常友好。搜索和筛选功能虽然基础但有几个细节值得留意。第一筛选不能只匹配包名还应该匹配描述和标签否则搜索 web server 这种词组时nginx 和 caddy 不会出现在结果里。第二结果列表最好默认显示版本、已安装状态、来源仓库这样一眼就能判断需不需要重复安装。第三支持多条件组合筛选比如只看已安装且有新版可升级的包这个场景几乎是大批量升级操作的前置动作。从实际使用来说一个能用的 BrewUI 至少要保证 5000 formula 和 6000 cask 的浏览流畅度如果列表数据加载有卡顿或者搜索要等很久用户大概率还是切回终端。2.2 一键安装与卸载把 tap、依赖、link 省掉安装和卸载是包管理器的核心操作。命令行里的标准安装流程是 brew install 包名看着简单但实际还牵扯到 tap 仓库的添加、依赖的计算、软链接的建立等隐藏步骤。BrewUI 在界面上做的事情是把这些步骤压缩成一个安装按钮。我实际操作下来感觉最舒服的两个点一是安装时可以展开依赖面板提前看到这个包会引入哪些间接依赖能判断这个包是不是重套餐二是卸载时界面会明确提示哪些包还依赖当前包帮你规避把某个包卸载了结果它依赖的软件全部瘫痪的尴尬。需要特别说明的是 formula 和 cask 的区别。简单来说formula 是命令行工具和依赖库cask 是带图形界面的 macOS 应用。在终端里安装一个 GUI 应用需要 brew install --cask chrome在 BrewUI 里通常会自动根据包类型走对应逻辑不会让你手动判断。但如果你遇到一个 GUI 应用装完后没有出现在启动台大概率就是 cask 的安装方式没有匹配好这种时候还要回到终端确认一下。卸载操作也有讲究。如果只是想暂时不用这个工具直接 uninstall 即可如果想连配置文件一起清掉命令行里要加 --zapBrewUI 一般会把这种高风险操作明确标记出来避免手滑。我的建议是界面上凡是带 清理、删除 性质的按钮出现二次确认都比没有要好这不光是防呆也是让用户意识到操作是不可逆的。2.3 升级与清理告别 brew upgrade 的恐惧症升级是很多人用 Homebrew 的痛点原因在于升级是不可选择的一条 brew upgrade 会把所有过期的包都升级万一某个新版本有兼容性问题被动等于是被迫中招。BrewUI 的升级模块我比较期待的是选择性升级。界面会先列出所有 outdated 的包并标注当前版本和最新版本你可以逐个勾选只升级你想升级的那几个。这个逻辑其实在终端里也能做到brew upgrade 包名1 包名2。但界面让这个过程变得可视化版本号对比、更新说明、发布时间一目了然对决策的帮助是非常大的。清理操作表面上更简单合理规划 brew cleanup 可以清理掉旧版本的安装包释放磁盘空间。不过哪些能清理哪些不能清理的判断标准对新手来说并不透明在界面上通过列表展示每一个可清理缓存的大小、版本号然后给出一个估算释放总量会大大减少用户的不安全感。2.4 依赖关系可视化依赖关系是包管理最硬核也最难看懂的部分。终端里查看一个包的依赖你可以用 brew info 或 brew deps输出结果比较抽象嵌套层级多了之后就很难建立整体概念。BrewUI 在这方面的设计思路应该是提供两块能力一是安装前展示这将安装哪些依赖二是卸载前展示哪些已安装包将受影响。前者是前瞻后者是风险预警。依赖关系的可视化不一定要做到多华丽的图形界面哪怕是用缩进列表把层级清晰呈现出来已经比命令行直观很多。我在实际使用中养成的习惯是任何包在升级或卸载前先看一眼依赖影响面。比如有一次我想卸载旧版本的 php界面上直接提示还有三个包依赖它这才避免了一次环境雪崩。这个能力命令行也有但 BrewUI 把它前置到操作之前而不是卸载失败后你才去排查原因。3. 安装与配置从拉取源码到跑起来3.1 环境准备与前置条件在安装 BrewUI 之前先要确认本机环境符合几个条件。虽然 BrewUI 本质上是 Homebrew 的 GUI 前端但它自身也是要跑在桌面环境的应用所以 macOS 的版本、Homebrew 是否安装、以及必要的开发环境都不能缺。最基础的条件是 macOS 系统建议 12.0 以上太老的系统容易出现编译依赖缺失。Homebrew 必须是已安装状态如果你还没装终端里执行官方安装脚本时我不建议你一路默认到底最好先确认 Xcode Command Line Tools 是否已经安装否则后续很多操作会在编译阶段报错。另外BrewUI 如果通过源码方式运行还要确保本机有 Git 和 Node.js 环境这两项是拉取代码和安装前端依赖的基础。有一个容易踩的坑是 Apple Silicon 和 Intel 两种架构的 Homebrew 安装路径不同。新机器的 Homebrew 默认在 /opt/homebrew 下老机器在 /usr/local 下。BrewUI 在启动时要能自动识别如果它只认死了其中一个路径在另一类机器上会直接罢工。建议安装后先跑一个简单的 brew doctor 确认环境健康再启动 BrewUI能省掉很多不必要的排查时间。3.2 下载、编译与启动BrewUI 最稳妥的安装方式是从源码构建。先通过 Git 把项目克隆到本地然后安装 Node 依赖最后执行开发模式启动或构建生产版本。以下是我建议的操作流程。git clone https://github.com/example/BrewUI.git cd BrewUI npm install npm run dev如果一切正常窗口会自动弹出。如果是在服务器或没有图形界面的环境里那就别折腾了GUI 工具必须要有桌面会话。需要说明的是以上命令示例只是最简流程具体构建命令以项目 README 为准不同版本的 BrewUI 启动命令可能略有差异实在不确定就看 package.json 里的 scripts 字段。有几个我在实际操作中遇到的细节npm install 在部分网络环境下会因为个别依赖下载失败而中断可以配置镜像源后再重试另外如果你本机 Node 版本过老npm install 过程中会遇到兼容性报错建议把 Node 升级到 18 或更高版本再构建。3.3 首次启动连接本地 Homebrew首次启动 BrewUI 时它需要确认两个信息你的 Homebrew 装在哪里以及你的当前用户是否有权限对它进行写操作。这一步做得好的项目会在启动时自动探测 brew 可执行文件的路径。如果探测不到就会要求你手动输入路径。通常 Apple Silicon 机器上填 /opt/homebrew/bin/brewIntel 机器上填 /usr/local/bin/brew。手动输入路径前可以先用 which brew 命令确认你自己的安装位置。这里要特别注意权限问题。Homebrew 的安装目录尤其是 /usr/local 这种系统目录默认归属不一定是当前用户。如果你遇到 Permission denied 或 cannot write to 报错大概率是安装 Homebrew 时用了 sudo 或者目录权限设置不对。正常的情况下Homebrew 安装目录应该归属你当前登录用户不需要每次都提权。如果权限不对不要直接用 sudo 跑 BrewUI应该先修正目录归属否则后续安装任何包都会碰到烦人的权限问题。sudo chown -R $(whoami) /opt/homebrew上面这条命令是修正目录归属的常规做法仅在确认归属确实有问题时使用别盲目执行。跑完之后再启动 BrewUI基本就能正常读写包信息了。3.4 其他安装方式与版本更新除了源码构建有些项目会提供编译好的 release 包下载 .dmg 或 .zip 解压即可使用这种方式对不熟悉前端的用户更友好。更新方式也简单重新下载新版本覆盖旧版本就行。如果你是源码安装的方式更新时在项目目录里拉取最新代码然后重新构建即可。git pull npm install npm run build我个人的经验是源码方式在追新功能时更快但如果你只是日常使用 GUI 来管理 Homebrew发布版反而更稳定因为发布版的构建流程通常经过更完整的测试。源码版有时候因为代码在开发中个别功能会出现不可用或界面错位的情况。4. 实操流程与核心模块体验4.1 实操场景一搜索并安装一个带依赖的开发工具我拿一个实际例子来演示 BrewUI 的完整安装流程。假设我想在机器上安装 nginx 作为本地开发服务器打开 BrewUI 后在主界面的搜索框输入 nginx。搜索结果里出现了几个相关的包比如 nginx、nginx-full、nginx-jwt 等每个包的右侧都显示了当前状态。看到 nginx 的描述写着 HTTP server版本是 1.25.x状态列显示未安装。点击进去之后详情页展示了几项关键信息依赖项列表、安装后体积、官方源地址、以及是否有其他版本。从依赖项列表来看nginx 需要 pcre2、openssl3、zlib 这些基础库这是合理的因为 HTTP 服务会涉及正则处理、SSL 协议和压缩算法。如果这些依赖已经在我机器上安装过BrewUI 会标注出来不需要重复安装。确认信息没有问题后直接点击安装按钮。安装过程中界面显示了实时日志这和终端里执行 brew install 是同样的输出。区别在于我不需要盯着终端安装完成后会有一个明确的状态变更提示。整个流程下来我从搜索到完成安装只花了不到一分钟如果完全在终端操作可能也差不多但心理压力小很多——因为它把将要发生什么都提前暴露了。4.2 实操场景二批量安装日常应用除了命令行工具Homebrew 也管理很多 GUI 应用这一块我在 BrewUI 里的体验是更顺畅的。假设要安装 Chrome、VS Code、WeChat 和 iTerm2只需要在界面中筛选 Cask 分类勾选这四款应用然后统一执行安装。批量操作在终端里也能实现brew install --cask google-chrome visual-studio-code wechat iterm2但你要自己记住每一个 cask 标识符记错了就报错。BrewUI 的做法是让你看到应用的真名、图标甚至简介选购意图非常清晰标识符的映射关系交给人界面处理。批量安装的日志会逐条列出每个 cask 的下载进度和安装结果。理论上并行安装会快一些但 Homebrew 本身对并发操作的支持不算稳定我不确定 BrewUI 是串行还是并行执行稳妥起见工具默认最好串行执行安装任务避免 brew 的锁冲突。实际使用中让我比较满意的是部分应用安装完成后BrewUI 能感知到状态变化把列表里的未安装标记刷新成已安装不用手动再拉一次列表。如果你是那种新机器到手半小时配完开发环境的用户Batch 模式值得多研究。配合 brew bundle 的导出能力甚至可以做到在旧机器上导出包清单新机器上打开 BrewUI 一键导入并安装全套环境这个流程我还真测试过确实省了不少时间。4.3 实操场景三版本升级与依赖更新管理升级是我用 BrewUI 最高频的操作。界面上的可升级标签会列出当前所有 outdated 的包包括版本变化情况、升级耗时预估等信息。我通常会在一天工作开始前打开升级面板从上到下看一遍。如果能升级的包数量不多我会全选直接升级如果数量比较多我会检查是否有大版本跳跃或者是否有我不熟悉的包出现在升级列表里。BrewUI 对单个包提供查看更新变化的入口点开后能看到这个包的新版本要求、更新发布时间以及涉及的依赖变化。这些信息在命令行里要逐个查界面里只需要点击即可。我在实际升级过程中遇到过一次“连带升级”的情况准备升级 postgresql 时界面提示它依赖的 openssl 也会跟着升级到 3.2 版本。当时我以为只是一个小补丁升级事后才发现容器里有些老应用不再兼容新版本 openssl。如果当初没看到那个依赖影响提示问题会延迟到更晚才暴露。所以我现在的建议是大版本升级前一定先看影响面BrewUI 的依赖关系预览比呆在终端里猜要直观得多。4.4 实操场景四诊断 Homebrew 环境状态Homebrew 自身也提供了诊断机制 brew doctor它会检查目录权限、残留配置、路径设置等常见问题。BrewUI 也把这个能力做了可视化呈现。在环境检测页面里每一项检查结果都有明确的状态标识有问题的项、正常的项、可忽略的警告项会被分开排列。比如目录权限异常会导致无法写入Xcode Command Line Tools 缺失会导致编译类公式无法安装这些在终端里是听着很抽象的提示在界面里却处理成了具体的修复建议。我遇到过一个很常见的情况系统里存在两个不同来源的 Homebrew 安装导致命令行为混乱。brew doctor 能看到警告但很多人不知道这意味着什么。在 BrewUI 里它会把它解释为检测到多个 Homebrew 安装路径当前使用 A建议清理 B这种引导性强很多。实操阶段最深的体会是BrewUI 把 Homebrew 的操作门槛从看懂日志降到了识别状态而这种状态识别的能力恰恰是新用户最缺的。5. 常见问题与排查技巧5.1 界面提示brew 命令未找到这是所有 GUI 封装工具最容易遇到的问题BrewUI 也不例外。原因很简单GUI 程序的 PATH 环境变量和终端不一样终端里配好的路径在 GUI 进程里可能根本不存在。排查思路按顺序来先手动在终端执行 which brew确认 Homebrew 的真实安装路径然后在 BrewUI 的设置页检查你填写的 brew 路径是否正确如果路径没问题但依然报错很可能是 shell 配置文件里的环境变量比如 .zshrc 里的 PATH 设置只在你自己的交互式 shell 里生效GUI 应用没有读取这个文件。有一种更隐蔽的情况你同时在机器上安装了老版本的 Homebrew/usr/local和新版本的 Homebrew/opt/homebrew系统默认调用了错误的那一个。此时最好的办法是保留一个清理掉另一个避免后续所有操作都出现路径冲突。5.2 安装或卸载时报权限错误权限错误在 Homebrew 里很常见尤其当你曾经用 sudo 安装过某些包或者 Homebrew 目录的 owner 不是当前用户。典型报错包括 Permission denied rb_file_chown 或 cannot write to Cellar。常规修复办法是修正目录归属我在前面已经给过命令。但这里要强调一个坑不要对所有文件盲目执行 chown -R尤其是 /usr/local 这个目录它下面可能包含非 Homebrew 系统文件全部改成当前用户所有并非绝对安全。更合理的做法是只修正 Homebrew 自己的目录比如sudo chown -R $(whoami) /usr/local/Homebrew sudo chown -R $(whoami) /usr/local/Cellar sudo chown -R $(whoami) /usr/local/Caskroom或者对 Apple Silicon 机器sudo chown -R $(whoami) /opt/homebrew如果你的机器上所有目录归属都正常但还报权限错误那就要检查是不是 SIPSystem Integrity Protection锁定了某些路径Apple Silicon 机器的 /System 目录下的部分路径是无权限写的。这时候不要和系统硬刚换一个标准 Homebrew 路径会比较容易解决。5.3 升级卡住或速度很慢Homebrew 的原版源服务器在国外升级变慢非常常见。如果你在终端里直接跑 brew update 发现一直卡在 Updating Homebrew...BrewUI 里大概率也会表现一样因为底层的网络请求并没有区别。解决办法有几个方向。第一是使用镜像源国内很多用户会把 HOMEBREW_API_DOMAIN 和 HOMEBREW_BOTTLE_DOMAIN 指向镜像站这样安装二进制包时速度会快很多。第二是调整终端代理设置如果你本机有 HTTP 代理可以在 shell 里配置。但这里有一个关键细节GUI 应用不一定读取你 shell 里的代理配置。如果你在终端里设置了 https_proxyBrewUI 调用的 brew 命令可能根本没有继承这个环境变量。所以当你在终端里测试正常、界面里却卡住时优先去看 BrewUI 进程的环境变量是否包含了代理配置或者它是否提供了网络设置的入口。另外某些步骤卡住是因为 git 缓存问题可以试试下面这条命令清掉本地缓存。rm -rf $(brew --repository)/Library/Taps/homebrew/homebrew-core brew update这会把核心仓库的本地 tap 缓存清理掉然后重新拉取。执行完之后再去 BrewUI 刷新一下升级速度通常会恢复。5.4 界面显示状态与实际不一致这个问题的根源在前面提到过状态同步机制。如果你在终端里手动执行了 brew install 或 brew uninstallBrewUI 如果没有重新拉取数据界面上显示的依然是旧状态。这类问题不算 bug更多是刷新策略的取舍。我的建议是遇到状态不一致先手动触发一次全局刷新如果还没有变化就用 brew list --formula 或 brew list --cask 对比确认实际情况。如果实际已经安装成功但界面仍显示未安装说明 BrewUI 的数据拉取出错了可以重启一次应用再试。还有一种情况是并发操作导致的数据过期你在界面里同时发起了多个安装任务前一个任务的状态还没刷新后一个任务又结束了界面上可能只显示最后的结果。如果是批量操作最好等所有任务都完成后再看最终状态中间过程的展示有交错是正常现象。5.5 一些值得培养的使用习惯使用 BrewUI 一段时间后我逐渐总结出几个习惯能有效减少折腾。第一大版本更新别急着点。特别是 source 类型的大版本跳变先看一眼依赖影响面再决定升不升。第二定期做清理。Homebrew 长期使用会产生大量旧安装包在界面里执行清理比终端里执行 brew cleanup -n 直观得多因为你明显能看到每个包占用的空间。第三碰到界面状态错乱先试重启再试清理缓存不要一上来就卸载重装 Homebrew。还有个小技巧BrewUI 的界面操作本质上是在生成 brew 命令如果你想知道某个按钮到底执行了什么命令通常可以在日志窗口里看到实际调用。这也是我判断一个 GUI 工具是否靠谱的准则——它应该让你可以对齐到底层命令而不是把命令封装成一个黑盒。能看到底层日志即使真出问题你也知道去终端里怎么排查。6. 边界、选型与扩展方向6.1 什么时候用 GUI什么时候回终端BrewUI 很好用但它不是所有场景的最佳选择。它擅长的是浏览与管理而终端擅长的是精确控制和脚本化。如果你要临时安装一个包且明确知道名字直接在终端 brew install 仍然是最快的路径。如果是要写 Dockerfile 或 CI 配置里安装依赖那也必须用命令行GUI 工具在这种场景里没有任何用武之地。BrewUI 真正发挥价值的场景是本机环境管理、依赖关系探查、多包批量操作、以及对 Homebrew 不熟悉的用户。另外一个边界是自动化和定时任务。Homebrew 本身没有内置定时清理、定时升级的机制BrewUI 大概率也不会做。如果你想要机器自动升级和清理还是得靠 launchd 写脚本。图形界面工具的价值在于人机交互而不是无人值守。6.2 同类型工具对比与选型参考Homebrew 的 GUI 项目不止一个BrewUI 并不是唯一的选择。我简单梳理过几个同类工具的定位差异。Cakebrew 是较早出现的 Homebrew GUI界面经典功能集中在包列表、安装、卸载这些核心操作上更新节奏近年来不算很快。还有一些商业软件或小程序也提供类似功能但通常会内置广告或捆绑其他服务选择时要特别注意隐私问题。对比下来BrewUI 的优势如果不是体现在跨平台或界面精美上那大概率体现在数据完整度和 Homebrew 新特性的适配速度上。Homebrew 自己的 API 和命令都在不断变化一个长期维护、紧跟上游的 GUI 项目才是更可靠的选择。选型建议可以这么判断如果你的需求只是偶尔看看有哪些包能升级任何一款有点人气的 GUI 都够用如果你希望界面上的依赖信息、cask 支持、升级覆盖范围都能和 brew --json 输出保持一致选一个维护活跃、发布频率高的项目更靠谱。6.3 后续还能怎么扩展从使用体验出发BrewUI 值得做的功能还有很多。比如自动更新提醒在后台定期执行 brew update遇到有升级包时通过通知中心提醒能减少很多手动拉取的操作。再比如环境档案管理把当前机器的包列表导出成可分享的快照别人拿到后一键还原同一套开发环境这个方向对团队协作很有吸引力。也可以考虑把 brew services 管理做进界面让用户在不接触命令的情况下启动、停止、重启后台服务。macOS 上真正让人头疼的不是安装而是装完之后怎么让服务处于恰到好处的运行状态这一步对新手尤其不友好。如果 BrewUI 能把服务管理和日志查看都做进去它的实用价值会再上一个台阶。我在实际使用中最想看到的改进是更透明的操作日志和更细粒度的批量选择。前者让我清楚每个点击动作的实际效果后者能让我在控制升级范围时更加游刃有余。这些功能目前还不确定 BrewUI 是否完全支持但顺着这个方向发展包管理的图形化工具才真正配得上好用这两个字。最后分享一个自己的经验不要把 BrewUI 当成 Homebrew 的敌人它更像是一副适合日常佩戴的眼镜。终端里那些精确、高效的命令依然有价值而图形界面解决的是快速理解、放心操作的问题。如果你身边有正在被 Homebrew 命令行劝退的朋友或者你自己就是时不时想偷个懒的老用户找一台机器把 BrewUI 跑起来试试很多结论会比读任何文章都更直观。
返回列表