1. MacOs环境准备
软件安装及打包工具
安装软件分类
不同软件用不同工具,但不能分太细,基本就是2类(再加点其他):
- 非nodeJs类
- nodeJs类
**表 1:软件分类 → 对应「包管理器/安装器」
| 类别 | 举例 | 推荐安装渠道 | 说明 |
|---|---|---|---|
| Node-JS 生态 | next、eslint、ts-node、vercel-cli | pnpm(本地或 dlx) | 锁版本、去重、幻影依赖清零 |
| macOS 系统/通用 CLI | git、curl、docker、python、go、rust、fnm、llvm | Homebrew | 官方 bottle 最快,签名完整 |
| GUI 应用/IDE | VS Code、Cursor、Android Studio、JDK、Docker Desktop | Homebrew Cask 或官网 .dmg | 自动更新+签名,一键卸载 |
| 苹果第一方 | Xcode、Simulator、Command Line Tools | App Store / xcode-select --install | 非 brew 管理,占空间大 |
可见我们的日常开发就集中在pnpm了。它的好处见我其他文档(我个人是为了节省昂贵的苹果硬盘)。
Node工具应用场景
**表 2:Node 工具「三条消费路径」——全部 pnpm 解决
| 场景 | 旧习惯 | 2025 正确姿势 | 备注 |
|---|---|---|---|
| 项目依赖 | npm i -D eslint | pnpm add -D eslint | 版本写进 lock,多人一致 |
| 本地常开 CLI | npm i -g @vercel/cli | 不要全局pnpm add -D vercel + pnpm exec vercel | 随项目升级,不污染系统 |
| 一次性/尝鲜 | npx create-next-app | pnpm dlx create-next-app | 临时下载、执行、自动清缓存 |
其他开发大件
**表 3:日常开发大件「该去哪装」速查
| 软件 | 安装命令(一键) | 事后升级 | 备注 |
|---|---|---|---|
| VS Code | brew install --cask visual-studio-code | brew upgrade --cask | 插件走 VS Code 自身市场 |
| Cursor | brew install --cask cursor | 同上 | |
| AI Agent CLI (Claude-dev、github-copilot-cli) | pnpm dlx claude-dev或 pnpm add -D claude-dev | 项目内 pnpm update | 随项目锁定版本,团队一致 |
| JDK (LTS) | brew install openjdk@21 | brew upgrade | export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH" |
| Android Studio | brew install --cask android-studio | brew upgrade --cask | SDK 内部自行更新 |
| Xcode | App Store 搜索安装 | App Store 更新 | 必须登录 Apple ID;CLI 工具首次打开后点安装 |
后续更新升级管理
1. 各工具「自我升级」标准动作
| 工具 | 升级命令 | 频率 | 备注 |
|---|---|---|---|
| Homebrew | brew update && brew upgrade && brew cleanup | 周/月 | cleanup 清旧版本,省盘 |
| pnpm | corepack prepare pnpm@latest --activate | 月 | 不走 npm/yarn,保证单例 |
| Node(brew 版) | brew upgrade node | 月 | 自动带新 corepack |
| Node(nvm 版) | nvm install 20 --latest-npm && nvm alias default 20 | 月 | 老项目需 .nvmrc |
| pnpm 自举(备用) | pnpm add -g pnpm@latest | 月 | 仅当 corepack 被禁用时 |
**补充:
| 场景 | 命令 | 说明 |
|---|---|---|
| 简单路线 | brew install node | 适合 90% 人;corepack 随赠 |
| 多版本路线 | nvm install 20 && nvm alias default 20 | 需旧版本/集成测试时用 |
| 切换版本 | nvm use 18 | 仅当前 shell 生效 |
之后暂不考虑nvm管理多版本的场景。 或者建议:主版本用 brew,临时旧版用 nvm,二者 PATH 不冲突。
2. 防止忘/防重复/防混乱
时间长了,没有好办法,只能靠记忆和原则? 要么不单独升级,用脚本统一做。
保存为 ~/bin/upgrade-all:
**一键「体检」脚本
#!/usr/bin/env bash
set -e
echo "1️⃣ 更新 brew"
brew update && brew upgrade && brew cleanup
echo "2️⃣ 更新 Node(brew 版)"
brew upgrade node
echo "3️⃣ 更新 pnpm"
corepack prepare pnpm@latest --activate
echo "4️⃣ 盘点并提交记录"
brew leaves > ~/dotfiles/brew-leaves.txt
pnpm list -g --depth=0 > ~/dotfiles/pnpm-global.txt
cd ~/dotfiles && git add . && git commit -m "chore: upgrade-all $(date +%F)"
echo "✅ 完成,记录已提交"
赋权:
chmod +x ~/bin/upgrade-all
**口诀贴墙
系统软件用 brew,Node 生态 pnpm
升级 brew 后,Node 跟着走
pnpm 升最新,corepack 一句话
关于brew安装的补充知识
Ask: brew install和brew install --cask区别?
一句话区分
brew install→ 装的是**“命令行公式(Formula)”**,源码或预编译二进制,丢进/opt/homebrew/Cellar,再软链到/opt/homebrew/bin,给终端用。brew install --cask→ 装的是**“macOS 应用(Cask)”**,完整.app/.pkg/.dmg,给 Finder/ Launchpad 用,通常带 GUI、签名、自动更新。
为什么 OpenJDK 不用 --cask
| 维度 | OpenJDK 现状 |
|---|---|
| 形态 | 只有头文件 + 动态库 + 可执行 java/javac,无 GUI,纯 CLI |
| 分发方式 | Homebrew 官方维护的是 Formula openjdk@21,已预编译成 bottle |
| 安装路径 | /opt/homebrew/Cellar/openjdk@21/21.0.x/bin/java → 软链到 /opt/homebrew/bin/java |
| 用途 | 供终端、构建工具、IDE 调用;不需要 .app 包裹 |
对比:Oracle JDK 提供
.dmg安装器,那种才有第三方 Cask(oracle-jdk),但 Homebrew 核心仓库不收,需额外 tap。
速记口诀
“终端命令用 Formula,窗口图标用 Cask;
JDK 只有二进制,所以公式就搞定。”