最近可能要进入公司的electron项目,想着在进入项目之前,先多熟悉熟悉相关的工具链
背景
Lerna 是一个用来优化托管在git、npm上的多package代码库的工作流的一个管理工具,可以让你在主项目下管理多个子项目,从而解决了多个包互相依赖,且发布时需要手动维护多个包的问题。
什么是lerna
lerna到底是什么呢?lerna官网上是这样描述的。
- 自动解决packages之间的依赖关系。
- 通过
git
检测文件改动,自动发布。 - 根据
git
提交记录,自动生成CHANGELOG
lerna项目看起来是什么样子的呢
my-lerna-repo/
package.json
packages/
package-1/
package.json
package-2/
package.json
lerna 能做什么
Lerna中主要要用到 lerna bootstrap
、lerna publish
这二个命令
- lerna bootstrap: 安装依赖
- lerna publish:发布和更新package
具体命令
lerna bootstrap
引导packages安装各自的依赖,它有–ignore和–scope二个可选参数
它主要做以下几件事:
- 为每个package npm install 安装dependencies.
- 为packages 中存在相互 dependencies的做Symlink
- npm prepublish all bootstrapped packages.
lerna publish
发布当前项目
他创建一个新的release,生成新的版本,执行git commit/tag并发布到npm
- 发布项目里的每个模块
- 执行lerna updated确定是否需要发布
- 假如需要发布 给lerna.json 版本号做自增
- 更新package.json里的版本号至最新
- 为新版本更新dependencies
- 为新版本创建一个git commit 和tag
- 发布更新项目到npm
- 一次发布所有packages,删除lerna-temp tags和增加tags到latest
通过在package.json中标记 “private”: true,将使该包不发布
lerna publish –npm-tag=next
当加上这个选项,发布时除了发布到npm,同时也会同步到给定的dist-tag(默认为latest)
这个选项一般用来发布prerelease或beta版
通常,通过npm install my-package这个命令安装的就是latest tag,你可以通过npm install my-package@prerelease来安装prerelease版
lerna.json
{
"lerna": "2.0.0-beta.18",
"version": "1.1.3",
"publishConfig": {
"ignore": [
"ignored-file",
"*.md"
]
},
"bootstrapConfig": {
"ignore": "component-*"
},
"packages": ["packages/*"]
}
更多参考详细文档