555 字
3 分钟
monorepo
monorepo 和 mutirepo 的对比
- monorepo,使用一个 Git 仓库管理项目相关的多个 模块/包/功能/应用。
- multirepo(又称为 polyrepo),使用多个 Git 仓库分别管理项目的每一个 模块/包/功能/应用
使用步骤:
Step0:全局安装 yarn
npm install yarn --global
Step1:配置 package.json
在根目录下使用yarn init
创建一个 packages.json 的文件
根目录下包含所有 devDependencies 开发依赖,所以不需要在子 packages.json 文件中重新声明开发依赖,但是不包括生产依赖 dependencies,生产依赖在子 packages.json 文件中声明
配置如下:
{
"name": "dayancloud",
"version": "1.0.0",
"license": "MIT",
"private": true, // 定义了本项目为私有项目
"workspaces": ["packages/*"] // 定义了每个 package 的位置
}
TIP
- 通常使用 1.0 版本
- yarn 需要设置 private: true
- 在 workspaces: []数组中定义相关的包,这里是指所有的包都位于 packages/*
Step2:配置 packages
在对应的包内配置 packages,按照规范命名,如果有互相依赖的包,需要在 packages 中的 dependencies 添加一下,如下:
{
"name": "@dayancloud/common",
"version": "0.1.0",
"private": true,
...
}
{
"name": "@dayancloud/main",
"version": "0.1.0",
"private": true,
"dependencies": {
"@dayancloud/common": "0.1.0",
...
}
...
}
Step3:安装 & 运行
使用yarn install
安装依赖,运行对应的包
例如为 project1 添加 vue 依赖,首先要在 project1 项目中初始化 packages.json,然后根据需要执行下面任意命令:
- 依赖选项属性会放到根目录里的 package.json
yarn add vue
- 依赖选项属性会放到 project1 里的 package.json
yarn workspace project1 add vue
如果真想让某个项目的所有依赖只安装于自己的项目,可以在根目录的 packages.json 配置 nohoist
选项,这样 project1 的依赖将会放到自己的目录, 但其它项目则无法再引用 project1 的依赖包
{
...
"nohoist": [
"/project1//*"
],
...
}
其它
如何使用 Yarn Workspaces 配置一个 Monorepo JS/TS 项目
Monorepo 一大优势是在同一 monorepo 项目下的不同 packages 可以相互引用
Lerna
Lerna 是一个优化使用 git 和 npm 管理多包存储库的工作流工具,用于管理具有多个包的 JavaScript 项目,可以一键把代码提交到 git 和 npm 仓库
npm install --global lerna
lerna init
初始化完成会在项目根目录创建 lerna.json 文件