npm v7+原生支持workspaces实现轻量monorepo:通过根package.json的"workspaces"字段声明子包路径,自动符号链接、共用依赖;支持跨workspace运行脚本,但需手动发布与版本管理。

npm 从 v7 开始原生支持 workspaces,无需额外工具就能实现轻量级 Monorepo 管理。核心是通过 package.json 中的 "workspaces" 字段声明多个子包路径,让 npm 统一管理依赖、脚本和版本。
配置 workspaces 字段
在根目录的 package.json 中添加 workspaces,指定子包所在目录(支持 glob 模式):
{
"name": "my-monorepo",
"private": true,
"workspaces": [
"packages/*",
"apps/*",
"libs/utils"
]
}这样 npm 就知道 packages/ 下所有子文件夹、apps/ 下所有项目、以及单独的 libs/utils 都是工作区成员。
自动链接与依赖共用
执行 npm install 时,npm 会:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 为每个 workspace 创建独立的
node_modules(但不会重复安装相同版本的依赖) - 自动将同 repo 内的 workspace 包作为 符号链接 安装(类似
npm link),无需发布到 registry - 如果 A 包依赖 B 包(B 是另一个 workspace),A 的
node_modules/b会直接指向../packages/b
跨 workspace 运行脚本
使用 npm run --workspace <pkg></pkg> 在指定包中运行脚本:
npm run build --workspace=packages/core npm run test --workspace=apps/web
也可批量执行:
npm run build --workspaces # 所有 workspace
注意:脚本需在对应 workspace 的 package.json 中定义(如 "scripts": { "build": "tsc" })。
发布与版本控制建议
npm workspaces 不提供自动版本管理或发布编排(这点不同于 Turborepo 或 Nx)。如需发布:
- 手动进入子包执行
npm publish(确保"private": false) - 或配合
changesets、lerna(仅用于发布环节)等工具做版本+changelog 管理 - 推荐把公共依赖(如 TypeScript、ESLint 配置)提升到根目录
devDependencies,各 workspace 继承使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










