Lerna是一个工具,它优化了使用git和npm管理多包存储库的工做流。vue
vue,babel,react等都在用。我司也在用。文档是英文,我便简单总结一篇,但愿对你们有帮助。node
vue,babel都是用这种,在publish
的时候,会在lerna.json
文件里面"version": "0.1.5",
,依据这个号,进行增长,只选择一次,其余有改动的包自动更新版本号。react
lerna init --independent
初始化项目。 lerna.json
文件里面"version": "independent",
webpack
每次publish
时,您都将获得一个提示符,提示每一个已更改的包,以指定是补丁、次要更改、主要更改仍是自定义更改。git
$ npm install lerna -g
$ mkdir lerna-gp && cd $_
$ lerna init # 用的默认的固定模式,vue babel等都是这个
# Add packages
$ cd packages
$ mkdir daybyday gpnode gpwebpack
...
#分别进入三个目录初始化成包
$ cd daybyday
$ npm init -y
$ cd ../gpnode
$ npm init -y
$ cd ../gpwebpack
$ npm init -y
复制代码
➜ lerna-gp git:(master) ✗ tree
.
├── lerna.json
├── package.json
└── packages
├── daybyday
│ └── package.json
├── gpnode
│ └── package.json
└── gpwebpack
└── package.json
4 directories, 5 files
复制代码
✗ git remote add origin git@gitlab.yourSite.com:gaopo/lerna-gp.git
#查看是否登陆
✗ npm whoami
gp0320
#没有则登陆
npm login
# 输入username password
Logged in as gp0320 on https://registry.npmjs.org/. # succeed
复制代码
默认是npm, 并且每一个子package都有本身的
node_modules
,经过这样设置后,只有顶层有一个node_modules
github
package.json and lerna.json
# package.json 文件加入
"private": true,
"workspaces": [
"packages/*"
],
# lerna.json 文件加入
"useWorkspaces": true,
"npmClient": "yarn",
复制代码
建立一个包,name包名,loc 位置可选web
# 根目录的package.json
"workspaces": [
"packages/*",
"packages/@gp0320/*"
],
# 建立一个包gpnote默认放在 workspaces[0]所指位置
lerna create gpnote
# 建立一个包gpnote指定放在 packages/@gp0320文件夹下,注意必须在workspaces先写入packages/@gp0320,看上面
lerna create gpnote packages/@gp0320
复制代码
增长本地或者远程
package
作为当前项目packages
里面的依赖npm
--dev
devDependencies 替代 dependencies
--exact
安装准确版本,就是安装的包版本前面不带^
, Eg: "^2.20.0" ➜ "2.20.0"
# Adds the module-1 package to the packages in the 'prefix-' prefixed folders
lerna add module-1 packages/prefix-*
# Install module-1 to module-2
lerna add module-1 --scope=module-2
# Install module-1 to module-2 in devDependencies
lerna add module-1 --scope=module-2 --dev
# Install module-1 in all modules except module-1
lerna add module-1
# Install babel-core in all modules
lerna add babel-core
复制代码
默认是npm i,由于咱们指定过yarn,so,run yarn install,会把全部包的依赖安装到根node_modules
.json
列出全部的包,若是与你文夹里面的不符,进入那个包运行yarn init -y
解决bootstrap
➜ lerna-gp git:(master) ✗ lerna list
lerna notice cli v3.14.1
daybyday
gpnode
gpnote
gpwebpack
lerna success found 4 packages
复制代码
导入本地已经存在的包
lerna run < script > -- [..args] # 运行全部包里面的有这个script的命令
$ lerna run --scope my-component test
复制代码
运行任意命令在每一个包
$ lerna exec -- < command > [..args] # runs the command in all packages
$ lerna exec -- rm -rf ./node_modules
$ lerna exec -- protractor conf.js
lerna exec --scope my-component -- ls -la
复制代码
项目包创建软链,相似npm link
删除全部包的node_modules目录
列出下次发版lerna publish
要更新的包。
原理: 须要先git add,git commit 提交。 而后内部会运行git diff --name-only v版本号
,搜集改动的包,就是下次要发布的。并非网上人说的全部包都是同一个版全发布。
➜ lerna-repo git:(master) ✗ lerna changed
info cli using local version of lerna
lerna notice cli v3.14.1
lerna info Looking for changed packages since v0.1.4
daybyday #只改过这一个 那下次publish将只上传这一个
lerna success found 1 package ready to publish
复制代码
会打tag,上传git,上传npm。 若是你的包名是带scope的例如:"name": "@gp0320/gpwebpack",
那须要在packages.json添加
"publishConfig": {
"access": "public"
},
复制代码
lerna publish
lerna info current version 0.1.4
#这句意思是查找从v0.1.4到如今改动过的包
lerna info Looking for changed packages since v0.1.4
? Select a new version (currently 0.1.4) Patch (0.1.5)
Changes:
- daybyday: 0.1.3 => 0.1.5 #只改动过一个
...
Successfully published:
- daybyday@0.1.5
lerna success published 1 package
复制代码