npm workspaces管理monorepo的核心是共用根目录、共享依赖、自动链接,避免重复安装和手动npm link;需npm 7+/Node 16+,通过workspaces字段声明子包路径,子包用"workspace:^"引用彼此,根目录统一install,支持-w指定工作区执行脚本。

用 npm workspaces 管理 monorepo,核心是让多个包共用一个根目录、共享依赖、自动链接,并避免重复安装和手动 npm link。它不复杂,但关键步骤不能跳。
初始化结构并声明 workspaces
在项目根目录执行:
- 运行
npm init -y创建根package.json - 编辑该文件,在顶层添加
workspaces字段,例如:
这表示所有 packages/ 和 apps/ 下的子目录(只要含有效的 package.json)都会被识别为独立工作区。
创建子包并设置内部依赖
每个子包必须有自己独立的 package.json,且名称需唯一(如 @myorg/core、@myorg/ui)。当某个包需要引用另一个本地包时,直接写成:
立即学习“Java免费学习笔记(深入)”;
"dependencies": { "@myorg/core": "workspace:^" }npm 会自动解析为符号链接,开发时修改源码即刻生效。不需要发布、不需要 npm link,也不用写相对路径。
统一安装与跨包操作
所有依赖都由根目录统一管理:
- 在根目录运行
npm install,公共依赖(如typescript、eslint)会被提升到根node_modules,各子包共享 - 执行脚本时可加
-w指定工作区,例如:npm run build -w @myorg/ui - 想批量执行?用
npm run build --if-present,npm 会自动遍历所有 workspace 中定义了build脚本的包
注意事项和常见坑
几个容易忽略但影响体验的点:
- Node 版本要求:必须 Node 16+(推荐 20+),npm 7+ 内置支持,低版本不兼容
-
子包 name 字段必须存在,且不能与已有 npm 包重名(建议加作用域,如
@myorg/xxx) -
不要手动改
node_modules里的链接,npm 会自动维护;若出错,删掉根node_modules和package-lock.json重装 -
CI/CD 中需显式启用 workspaces:某些 CI 默认不识别,可在命令前加
NODE_OPTIONS=--no-warnings并确保使用 npm ≥ 8.3+


















