You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Yarn初始化Monorepo并在其中创建Create React App,同时将node_modules统一置于根目录

用Yarn Workspaces实现根目录统一管理node_modules的Monorepo

没问题,Yarn的**工作区(Workspaces)**就是专门干这个的,完美匹配你的需求——所有依赖统一装在根目录node_modules,packages里的CRA项目共用这些依赖。下面是一步步的实操指南:

1. 初始化根Monorepo目录

首先创建并进入你的根文件夹:

mkdir monorepo && cd monorepo

然后初始化根package.json,记得加上private: true(Yarn工作区要求根包必须是私有的,不能发布):

yarn init -y

打开生成的package.json,修改成这样:

{
  "name": "monorepo",
  "version": "1.0.0",
  "private": true,
  "workspaces": [
    "packages/*"
  ]
}

workspaces字段告诉Yarn:去packages目录下找所有子项目。

2. 创建packages里的CRA项目

直接在根目录运行CRA的创建命令,指定项目放在packages文件夹下:

yarn create react-app packages/create-react-app-1
yarn create react-app packages/create-react-app-2

⚠️ 重点:不要进入子项目单独执行yarn install!Yarn会自动把所有依赖安装到根目录的node_modules里,子项目里不会生成自己的node_modules文件夹。

3. 统一管理所有依赖在根package.json

如果CRA自动给子项目生成的package.json里有依赖声明,你可以把这些依赖(比如react、react-dom、react-scripts等)移到根目录的package.json中,然后删掉子项目里的dependencies和devDependencies字段(保留name、version、scripts这些即可)。

之后如果要新增依赖,直接在根目录执行安装命令,比如:

# 安装生产依赖到根目录
yarn add axios
# 安装开发依赖到根目录
yarn add -D eslint

如果Yarn提示需要加-W参数(忽略工作区根检查),就加上:

yarn add axios -W

4. 运行子项目的脚本

你可以通过Yarn的workspace命令直接在根目录运行子项目的脚本:

# 启动第一个CRA项目
yarn workspace create-react-app-1 start
# 构建第二个CRA项目
yarn workspace create-react-app-2 build

嫌麻烦的话,还可以在根package.json的scripts里加快捷命令:

{
  "scripts": {
    "start:app1": "yarn workspace create-react-app-1 start",
    "build:app2": "yarn workspace create-react-app-2 build"
  }
}

之后直接运行yarn start:app1就能启动第一个项目了。

5. 关键注意事项

  • 根package.json必须设置private: true,否则Yarn会拒绝启用工作区。
  • 所有依赖安装、更新操作都要在根目录执行,不要在子项目里单独操作。
  • 如果某个子项目需要特殊版本的依赖,也可以在它自己的package.json里声明,Yarn会自动处理版本兼容,但尽量保持根目录依赖统一,避免版本混乱。

这样你的目录结构就完全符合要求了——根目录有唯一的node_modules,所有子项目共用这些依赖,管理起来非常方便!

内容的提问来源于stack exchange,提问作者Sennen Randika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 09:19:05