创建
安装lerna、yarn,初始化工程
npm i lerna yarn -g
git init mono-repos && cd mono-repos && yarn add lerna -D && lerna init
配置root目录package.json
{
"name": "root",
"private": true,
"devDependencies": {
"lerna": "^4.0.0"
},
"workspaces": [
"packages/*"
]
}
配置lerna.json
{
"packages": [
"packages/*"
],
"version": "independent",
"npmClient": "yarn",
"useWorkspaces": true
}
依赖管理
常用命令
yarn install
yarn workspace <package-name> [add|remove] <library> [-D|-S]
hoist功能
- 当使用lerna + yarn workspace时,lerna的--hoist会被禁用,我们直接使用yarn install即可实现相同功能。
mkdir -p packages/sub-package-1/src/index.js && cd packages/sub-package-1 && npm init -y
cd -
mkdir -p packages/sub-package-2/src/index.js && cd packages/sub-package-2 && npm init -y
- 在sub-package-1、sub-package-1中安装pretty-format,该依赖会被放在对应package的node_modules中。
- 再执行yarn install,2个包中相同的pretty-format会被提升到root的node_modules中。
yarn workspace sub-package-1 add -D pretty-format
yarn workspace sub-package-2 add -D pretty-format
yarn install
版本发布
常用命令
lerna exec
lerna changed
lerna diff
lerna publish
lerna clean
lerna init
lerna create
lerna run
尝试发布一个包
npm login
{
"name": "sub-package-1",
"version": "1.0.0",
"main": "src/index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"repository": {
"type": "git",
"url": "https://xxx.com/xxx/xxx.git"
},
"publishConfig": {
"access": "public"
}
}
lerna publish
- 以上是对lerna + yarn workspace搭建的mono-ropos工程基本使用,接下来有新的发现再更新。
可能遇到的问题
- 当没有提交代码发布失败后,提交代码再次发布不会更新到npm仓库,这种情况可以使用以下方式提交。
lerna publish from-package
lerna publish from-git
参考
zhuanlan.zhihu.com/p/108118011
zhuanlan.zhihu.com/p/372889162