关键字:lerna yarn workspace
lerna
lerna init
将一个仓库初始化为 lerna 仓库(默认固定模式)
lerna create 「package」
创建一个 package 到项目工程的 packages 下。
lerna add 「module」
- 为每个 package 都安装指定依赖:
lerna add react
- 为指定的 package 安装特定依赖:
lerna add react-dom packages/package1
// or
lerna add react-dom --scope=package1
- 添加依赖到根目录 node_modules 中:
npm install typescript -D
- package 之间的相互依赖(会在 package/package.json 下添加该依赖):
lerna add package2 --scope package1
// or
lerna add package2 packages/package1
lerna publish
用于 npm 包版本发布
lerna bootstrap
用于将 packages 链接在一起(前提是相互依赖的库),并安装 package 下的依赖到 package/node_modules。
-
注意,它不会安装根目录 package.json 的依赖,如果需要安装根目录依赖,请使用 npm install。
-
参数:
--hoist:依赖提升,把每个 package 下的依赖包都提升到工程根目录(删除包下的 node_modules,将依赖安装在根目录,但依赖注册不会在 package/package.json 内删除,也不会在 root/package.json 内添加此依赖)
lerna clean
删除各个包下的 node_modules(不会删除根目录 node_modules)。
lerna run 「script」
- 运行每个包下面的 script(如果某个包没有此 script,将会报错)
lerna run test
- 运行某个包下面的 script
lerna run test --scope package1
lerna link
链接互相引用的库,当 pakcage/package.json 内明确了 packages 下的包时,才会将相关包链接到 package/node_modules 中。
lerna info
查看 lerna 及运行环境的信息。
Lerna 最佳实践
lerna + yarm workspace 结合的 Monorepo 方案
- yarn 处理依赖安装工作
- lerna 处理发布流程
yarn workspace 管理工程
初始化工程时,需另做配置如下:
- 1, 在 lerna.json 中声明使用 yarn workspace 进行依赖管理:
{
...
"npmClient": "yarn",
"useWorkspaces": true
}
- 2, 在 root/package.json 下必需包含 workspaces 数组,与 lerna.json 下的 packages 保持一致:
{
"private": true, // 工作空间不需要发布
...
"workspaces": ["packages/*"]
}
yarn workspace 管理命令
- 处理工程下指定的包模块时使用:yarn workspace;
- 处理工程根目录全局或所有包模块时使用:yarn workspaces。
yarn install
代替 npm install + lerna bootstrap 安装工程依赖。
它与 lerna bootstarp 不同的是:
- yarn install 会将 package 下的依赖统一安装到根目录之下。这有利于提升依赖的安装效率和不同 package 间的版本复用(有些包是需要私有依赖的,而私有依赖会被多个包安装多次,而提升依赖可以解决这一问题)。
- yarn install 会自动帮助解决安装(包括根目录下的安装)和 packages link 问题。
yarn add 「module」
- 为每个 package 都安装指定依赖:
yarn workspaces add react
- 为指定的 package 安装特定依赖:
yarn workspace package1 add react react-dom --save
package1 一定是 packages/package1/package.json name 字段,有时候 package 的目录名和 name 字段不一致,要以 name 为准。
- 添加依赖到根目录 node_modules 中:
cd 根目录
yarn add @babel/core -D -W (-W 表示将依赖添加到 workspaces 根目录)
- package 之间的相互依赖(会在 package/package.json 下添加该依赖):
yarn workspace package1 add package2
当 package2 没有发布在 npmjs 上时,此时会报错:package2 not found;解决办法:显示指定 package2 的版本: yarn workspace package1 add package2@^1.0.0
- 在工程根目录下引入 packages/package 包:
yarn add package@^1.0.0 -W
yarn remove「module」
和上面 yarn add 命令格式相同,只需将 add 替换为 remove 即可。
yarn run 「script」
- 运行工程根目录下 script:
yarn test
- 运行指定包模块下的 script:
yarn workspace package1 run test
命令虽然是在根目录下执行,但在执行文件中拿到的 process.cwd() 是 package 下的执行文件所在路径
- 运行所有 package 下的 script 命令:
yarn workspaces run test
如果某个 package 下没有对应 script,将会终止命令,并报错。
yarn workspaces info
查看 workspace 依赖树信息。
网友评论