lerna
-
mkdir lerna-demo
在d:/ 下创建一个空的文件夹,命名为lerna-demo
-
cd lerna-demo && lerna init
初始化 通过cmd进入相关目录,进行初始化
-
生成目录如下:
- packages(目录)
- lerna.json(配置文件)
- package.json(工程描述文件)
-
添加一个测试package
默认情况下,package是放在packages目录下的。
// 进入packages目录
cd d:/lerna-demo/packages
// 创建一个packge目录
mkdir module-1
// 进入module-1 package目录
cd module-1
// 初始化一个package
npm init -y
-
cd lerna-demo && lerna bootstrap
安装各packages依赖 这一步操作,官网上是这样描述的。
lerna bootstrap
: 安装依赖lerna publish
:发布和更新package
-
发布 在发布的时候,就需要git 工具的配合了。 所以在发布之前,请确认此时该lerna工程是否已经连接到git的远程仓库。你可以执行下面的命令进行查看。
git remote -v
// print log
origin git@gitlab.ximalaya.com:xmkp-math-h5/lerna-demo.git (fetch)
origin git@gitlab.ximalaya.com:xmkp-math-h5/lerna-demo.git (push)
本篇文章的代码托管在Github上。因此会显示此远程链接信息。 如果你还没有与远程仓库链接,请首先在github创建一个空的仓库,然后根据相关提示信息,进行链接。
lerna publish
-
增加模块包到 packages 中指定项目 下面是将 ui-web 模块增加到 example-web 项目中
lerna add antd-mobile --scope=module-2
-
在最外层运行里面制定的项目
lerna exec --scope module-2 -- yarn test
-
如果命令中不增加 --scope example-web直接使用下面的命令,这会在 packages 下所有包执行命令rm -rf ./node_modules
lerna exec -- rm -rf ./node_modules
-
lerna list
显示所有的安装的包
-
lerna list --json
可以通过json的方式查看 lerna 安装了哪些包,json 中还包括包的路径,有时候可以用于查找包是否生效。
-
lerna clean
从所有包中删除 node_modules 目录
注意下 lerna clean 不会删除项目最外层的根 node_modules
-
vv
lerna常用的命令用法
-
基于 lerna 的多包项目建设与npm & unpkg 的发布(一)
-
增加两个 packages
- lerna create @mo-demo/cli
- lerna create @mo-demo/cli-shared-utils
-
分别给相应的package增加依赖模块
- lerna add chalk // 为所有 package 增加 chalk 模块
- lerna add semver --scope @mo-demo/cli-shared-utils // 为 @mo-demo/cli-shared-utils 增加 semver 模块
- lerna add @mo-demo/cli-shared-utils --scope @mo-demo/cli // 增加内部模块之间的依赖
-
发布
-
lerna bootstrap --hoist
为某个 package 安装的包被放到了这个 package 目录下的 node_modules 目录下。这样对于多个 package 都依赖的包,会被多个 package 安装多次,并且每个 package 下都维护 node_modules ,也不清爽。于是我们使用 --hoist 来把每个 package 下的依赖包都提升到工程根目录,来降低安装以及管理的成本
为了省去每次都输入 --hoist 参数的麻烦,可以在 lerna.json 配置:
{
"packages": [
"packages/*"
],
"command": {
"bootstrap": {
"hoist": true
}
},
"version": "0.0.1-alpha.0"
}
-
lerna clean
lerna clean
info cli using local version of lerna
lerna notice cli v4.0.0
lerna info Removing the following directories:
lerna info clean packages/cli-shared-utils/node_modules
lerna info clean packages/cli/node_modules
lerna info clean packages/hello-world/node_modules
lerna info clean packages/module-1/node_modules
lerna info clean packages/module-2/node_modules
? Proceed? (ynH)
-
优雅的提交
commitizen 是用来格式化 git commit message 的工具,它提供了一种问询式的方式去获取所需的提交信息.
cz-lerna-changelog 是专门为 Lerna 项目量身定制的提交规范,在问询的过程,会有类似影响哪些 package 的选择。如下:
- vim .git/COMMIT_EDITMSG 可以查看到 commitizen && cz-lerna-changelog 指定的项目
上面我们使用了 commitizen 来规范提交,但这个要靠开发自觉使用 npm run c 。万一忘记了,或者直接使用 git commit 提交怎么办?答案就是在提交时对提交信息进行校验,如果不符合要求就不让提交,并提示。校验的工作由 commitlint 来完成,校验的时机则由 husky 来指定。husky 继承了 Git 下所有的钩子,在触发钩子的时候,husky 可以阻止不合法的 commit,push 等等。
// 安装 commitlint 以及要遵守的规范
npm i -D @commitlint/cli @commitlint/config-conventional
// 安装 husky
npm i -D husky
module.exports = { extends: ['@commitlint/config-conventional'] }
// 在 package.json 中增加如下配置
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
"commit-msg"是git提交时校验提交信息的钩子,当触发时便会使用 commitlit 来校验。安装配置完成后,想通过 git commit
或者其它第三方工具提交时,只要提交信息不符合规范就无法提交。从而约束开发者使用 npm run c
来提交;
-
standardjs && lint-staged
除了规范提交信息,代码本身肯定也少了靠规范来统一风格
standardjs
就是完整的一套 JavaScript 代码规范,自带 linter & 代码自动修正。它无需配置,自动格式化代码并修正,提前发现风格以及程序问题。lint-staged staged
是 Git 里的概念,表示暂存区,lint-staged 表示只检查并矫正暂存区中的文件。一来提高校验效率,二来可以为老的项目带去巨大的方便。
// 安装
npm i -D standard lint-staged
{
"name": "root",
"private": true,
"scripts": {
"c": "git-cz"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-lerna-changelog"
}
},
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"*.js": [
"standard --fix",
"git add"
]
},
"devDependencies": {
"@commitlint/cli": "^8.1.0",
"@commitlint/config-conventional": "^8.1.0",
"commitizen": "^3.1.1",
"cz-lerna-changelog": "^2.0.2",
"husky": "^3.0.0",
"lerna": "^3.15.0",
"lint-staged": "^9.2.0",
"standard": "^13.0.2"
}
}
安装完成后,在 package.json 增加 lint-staged 配置,如上所示表示对暂存区中的 js 文件执行 standard --fix
校验并自动修复。那什么时候去校验呢,就又用到了上面安装的 husky ,husky的配置中增加pre-commit
的钩子用来执行 lint-staged
的校验操作,如上所示。
此时提交 js 文件时,便会自动修正并校验错误。即保证了代码风格统一,又能提高代码质量。
-
自动生成日志
有了之前的规范提交,自动生成日志便水到渠成了。再详细看下 lerna publish 时做了哪些事情:
- lerna version
- 找出从上一个版本发布以来有过变更的 package
- 提示开发者确定要发布的版本号
- 将所有更新过的的 package 中的package.json的version字段更新
- 将依赖更新过的 package 的 包中的依赖版本号更新
- 更新 lerna.json 中的 version 字段
- 提交上述修改,并打一个 tag
- 推送到 git 仓库