# HowTo Lerna
# Lerna 和 yarn 结合使用(最佳实践)
# 安装依赖
npm i -g lerna yarn
# 初始化项目
mkdir lerna-repo && cd $_
npx lerna init --independent
# 设置 yarn workspace
设置package.json
{
"name": "root",
"private": true,
"workspaces": [
"packages/*"
],
}
设置lerna.json
{
"command": {
"bootstrap": {
/* 此模式:当多个包有相同依赖时会提升到顶层的node_modules,避免重复安装,减少体积 */
"hoist": true,
/* 在bootstrap期间,将参数传递给 npm install */
"npmClientArgs": ["--no-package-lock", "--no-ci"]
},
},
/* 使用yarn运行所有命令 */
"npmClient": "yarn",
/* 使用yarn的工作区(需在package.json中指定workspaces) */
"useWorkspaces": true,
/* 独立模式:该模式下只有改动过的 package 才会被发布,每次发布时,都会提示您已更改的每个软件包,以指定是补丁,次要,主要还是自定义更改,注意:使用约定式提交后,会根据commit生成对应版本,无需手动指定 */
"version": "independent"
}
# 安装依赖
- 安装所有依赖(bootstrap)
# --npm-client=yarn --hoist 会冲突
# 用 yarn workspace 特性替代 lerna bootstrap
$ yarn
- 根项目安装依赖
# yarn 使用 workspace 模式安装 npm 包时必须加 -W 参数
$ yarn add -D -W lodash
- 给 package 安装外部依赖
yarn workspace @sialvsic/xxx add lodash
- 给 package 安装内部依赖
# 一定要指定正确的版本号,不然会到npm查找包
$ yarn workspace @sialvsic/xxx add @sialvsic/xxx@1.0.0
# 清除依赖
$ lerna clean && rm -rf ./node_modules
# 运行命令
# lerna run [...cmd] --scope @scope
$ lerna run compile --scope @ndogkit/shared-utils
# 发布
# 查看更改,同样 package.json 中设置了 "private": true 的 package 不会展示
$ lerna changed
# 每次发布会自动更新相关package的版本号,并且会更新引用该package的其他package依赖
$ lerna publish