lerna
项目管理形式
固定模式
默认的模式
版本号应用 lerna.json 文件中的 version 属性。
执行 lerna publish 时,如果代码有更新,会自动更新此版本号的值。即:所有的包公用一个版本号
应用形式:
lerna init
独立模式
容许保护人员独立的减少批改每个包的版本,每次公布,所有更改的包都会提醒输出指定版本号。
应用形式:
lerna init --independent
或 批改lerna.json
中的version
值为independent
,可将固定模式改为独立模式运行。
初始化我的项目
lerna
提供一种集中管理 package 的目录模式,提供了一套自动化管理程序
git init lerna-demo & cd $_
npm i -g lerna
lerna init
// 初始化后目录构造
|—— packages // 空目录
|—— lerna.json
|—— package.json
配置文件lerna.json
{
"npmClient": "yarn", // 执行命令所用的客户端,默认为 npm —— 配置后会强制应用最佳实际:能用 yarn 的用 yarn——如 lerna bootstap --hoist 不再可用
"command": { // 命令相干配置
"publish": { // 公布时配置
"allowBranch": "master", // 只在 master 分支执行 publish
"conventionalCommits": true, // 生成 changelog 文件
"exact": true, // 精确的依赖项
"ignoreChanges": ["ignored-file", "*.md"], // 公布时疏忽的文件
"message": "chore(release): publish" // 公布时的自定义提醒音讯
},
"bootstrap": { // 装置依赖配置
"ignore": "component-*", // 疏忽项
"npmClientArgs": ["--no-package-lock"], // 执行 lerna bootstrap 命令时传的参数
"hoist": true
},
"version": {"conventionalCommits": true // 开启日志:主动生成 changLog.md}
},
"packages": [ // 指定寄存包的地位
"packages/*"
],
"version": "0.0.0" // 以后版本号
}
启用 workspaces 环境
手动批改根目录下package.json
{
"name": "root",
"private": true,
"workspaces": ["packages/*"],
"devDependencies": {"lerna": "^3.22.1"}
}
创立模块
lerna create @demo/cli
lerna create @demo/cli2
yarn workspaces info
// 查看工作区
装置 / 删除依赖
yarn workspace packageB add packageA
// 给某个 package 装置依赖yarn workspace package-b add package-a@0.0.0
或larna add package-a --scope=package-b
// 将 packageA 作为 packageB 的依赖进行装置
// ^ == yarn workspace
装置本地包,第一次必须加上 lerna.json
中的版本号(后续肯定不要再加版本号),否则,会从 npm.org
近程检索装置
yarn add -W -D typescript
// 在 root 下装置专用依赖 typescript
lerna
公布流程
日志标准
commitizen
是用来格式化git commit message
的工具,它提供了一种问询式的形式去获取所需的提交信息。
cz-lerna-changelog
是专门为Lerna
我的项目量身定制的提交标准,在问询的过程,会有相似影响哪些 package 的抉择
yarn add -D commitizen
yarn add -D cz-lerna-changelog
代码格调
yarn add -D standard lint-staged
lint-staged
中的staged
是Git
里的概念,示意暂存区,lint-staged
示意只查看并改正暂存区中的文件。一来进步校验效率,二来能够为老的我的项目带去微小的不便。
上传主动生成日志
lerna version
// 上传我的项目
// 主动实现以下性能
- 找出从上一个版本公布以来有过变更的 package
- 提醒开发者确定要公布的版本号
- 将所有更新过的的 package 中的 package.json 的 version 字段更新
- 将依赖更新过的 package 的 包中的依赖版本号更新
- 更新 lerna.json 中的 version 字段
- 提交上述批改,并打一个 tag
- 推送到 git 仓库
参考文档
- lerna 官网
- yarn 官网文档
- lerna+workspace 最佳实际