| 方案 | 优点 | 问题 |
|---|---|---|
| Node 22 LTS | 生态稳定,兼容范围广 | 支持周期短于 Node 24,不作为新项目首选 |
| Node 24 LTS | 当前 LTS,生命周期和现代工具兼容性合适 | 部分旧工具可能需要升级 |
| Node 26 Current | 新特性最多 | 尚未进入 LTS,不适合作为生产模板默认基线 |
我选择 Node 24 LTS。Volta 固定经过验证的精确补丁版本,engines 只声明最低版本为 Node 24,不限制更高版本。engines 用于声明兼容下限,开发和 CI 环境以 Volta 固定的版本为准。
| 方案 | 优点 | 问题 | 结论 |
|---|---|---|---|
Utoo(ut) |
安装快;兼容 npm 命令和 package-lock.json v3;可以直接联系作者反馈问题 |
工具较新;生态、CI 案例和项目级版本锁定能力不如 pnpm 成熟 | 首选 |
| pnpm | 安装快;磁盘复用好;依赖边界严格;生态和 CI 支持成熟 | Volta 对 pnpm 的支持仍是实验性,通常需要使用 Corepack 管理版本 | 稳定回退方案 |
| npm | Node 自带;兼容范围最广;Volta 支持完整 | 安装性能和磁盘复用一般,相比 Utoo 和 pnpm 缺少明显收益 | 不选 |
| Yarn | Workspace 和约束能力完整 | 单应用模板收益有限,额外配置较多 | 不选 |
| Bun | 安装快,并提供运行时和测试工具 | 与 Node + Volta 路线重叠,增加运行环境差异 | 不选 |
我选择 Utoo(ut)作为默认包管理器。它的安装性能和 npm 兼容性符合模板需求;同时,我可以直接联系作者反馈问题,有助于控制新工具的采用风险。
稳定性风险通过保留 pnpm 回退路径处理。项目不使用只有 Utoo 才支持的依赖声明和脚本写法,确保必要时可以迁移到 pnpm。
- 日常开发和 CI 统一使用
ut,仓库不提交锁文件。 - 项目 scripts 保持标准
package.json写法,不在脚本中依赖ut专属行为。 - 为保持 pnpm 回退能力,不使用
.utoo.toml、Utoo Catalog 等专属配置。 - 需要回退时,删除本地
node_modules和package-lock.json,再使用 pnpm 根据package.json安装依赖。 - pnpm 生成的
pnpm-lock.yaml同样不提交,由.gitignore统一忽略。 - 同步将本地安装、CI 和文档命令切换为
pnpm,并重新执行完整验证。
工具链和项目依赖分开处理:
| 对象 | 策略 |
|---|---|
| Node.js | Volta 固定精确补丁版本;engines 只声明最低版本为 Node 24 |
| Utoo | CI 显式安装经过验证的精确版本;本地开发版本以 CI 基线为准 |
| 直接依赖 | 优先使用最新稳定版本,版本范围默认使用 ^;存在明确兼容风险时使用 ~ 或精确版本 |
| 完整依赖树 | 不锁定;干净环境安装时重新解析最新兼容版本 |
| CI 安装 | 使用 ut install;CI 环境会关闭 Utoo 自动更新 |
仓库不提交 package-lock.json 或其他包管理器锁文件。包管理器在本地生成的锁文件由 .gitignore 忽略;干净环境根据 package.json 重新解析依赖,因此同一提交在不同时间可能得到不同的完整依赖树。该策略以自动获得范围内的最新兼容版本为优先,不保证依赖安装结果完全可复现。
- 默认使用
^,允许兼容的 Minor 和 Patch 更新。 - 只有依赖存在明确兼容风险或需要限制 Minor 更新时才使用
~;需要完全固定行为时使用精确版本。 - 版本范围内的更新在重新解析依赖时自动获取,不单独维护升级任务。
- Major 更新需要显式修改依赖范围,并根据迁移文档完成验证。
- 超出当前版本范围的安全修复需要显式升级依赖。
- Node.js 只跟随 LTS,不跟随 Current。
- Utoo 升级后验证依赖安装结果;出现阻断问题时先恢复到上一个已验证版本,再决定修复或回退 pnpm。
我使用 Volta 管理 Node.js,不额外增加 .nvmrc 或 .node-version。
选择依据:
- Volta 会把 Node.js 版本直接写入
package.json。 engines可以向未使用 Volta 的开发者声明兼容范围。- 同时维护 Volta、
.nvmrc和.node-version会产生多个版本来源。 - 仅在明确需要兼容 nvm、fnm 或其他工具时补充对应文件。
| 项目 | 结论 |
|---|---|
| Node.js | Node 24 LTS,Volta 固定精确补丁版本 |
| 默认包管理器 | Utoo(ut) |
| 稳定回退方案 | pnpm |
| 锁文件 | 不提交;本地生成的锁文件加入 .gitignore |
| CI 安装命令 | ut install |
| Node.js 版本管理 | Volta |
.nvmrc / .node-version |
不配置 |
| 依赖版本 | 优先使用最新稳定版本并默认使用 ^,干净环境安装范围内最新版本 |
package.json 基础配置:
{
"engines": {
"node": ">=24"
},
"volta": {
"node": "24.18.0"
}
}