lerna是monerepo代表,搭配yarn workspace更方便。
【前置条件】第一步先登录你npm或者你私库
// npmjs 设置发布源头
npm config set registry https://registry.npmjs.org
// 登录
npm login
后续账号密码登录等等
装lerna和yarn
npm i -g lerna yarn
lerna建空项目 lerna init
- 执行 lerna init,会创建git仓库
md lerna-yarn-demo
cd lerna-yarn-demo
lerna init
修改lerna配置使用yarn workspace
- 在
lerna.json
中声明使用yarn workspace
进行依赖管理:
{
...
"npmClient": "yarn",
"useWorkspaces": true
}
- 在
root/package.json
下必需包含workspaces
数组,与lerna.json
下的packages
保持一致:
{
"private": true, // 工作空间不需要发布
...
"workspaces": ["packages/*"]
}
提交到git仓库
git add .
git commit -m "first commit"
git remote add origin https://github.com/rootegg/lerna-yarn-demo.git
git push -u origin master
lerna create 建包
lerna create company-ui
lerna create company-util
lerna create company-cli
新建包之后都需要执行 yarn install
yarn install 初始化安装包
yarn install
相互安装依赖包 yarn workspace add
装包两种情况
给company-ui项目[安装/移除]已发布的包
yarn workspance company-ui [add/remove] lodash
可以看到只在 company-ui 的package.json中多了包,其他项目中没有增加lodash
而且,lodash包装在了根目录下 node_modules
"dependencies": {
"lodash": "^4.17.21"
}
注意:没有给所有项目[安装/移除]包命令,需要一个一个包自己装,下面这个命令是错误的,没有这个命令
yarn workspances [add/remove] vue
给company-u安装未发布的包,关联内部包
lerna add [内部未发布的包] --scope company-ui // 因为未发布的包使用yarn workspace会报错
包修改版本 lerna version
需要先手动git add和commit信息
git add .
git commit -m "registry modify"
lerna version
lerna version 的作用是打tag和push到git仓库
包发布 lerna publish
注意:
- 查看packages下面每个package.json的pubicConfig指定了发布源
包发布 lerna publish from-package
因为上面我们是单独执行的 lerna version
所以发布需要执行
lerna publish from-package
当然 lerna publish = lerna version + lerna publish from-package
第一次运行clone项目
直接在根目录执行 yarn install 就行了
发布某个之前tag
比如现在执行了 lerna version 已经打tag和推送到了服务器
继续在写代码,后面需要把上次的tag发布上去
-
先切换到 tag上
npm checkout v0.1.3
-
再执行发布
lerna publish from-package