lerna
github:lerna 使用lerna管理大型前端项目 学习参考:lerna学习(二)
lerna init --independent
使用lerna管理项目时,可以选择两种模式。 默认的为固定模式(Fixed mode),当使用lerna init命令初始化项目时,就默认为固定模式,也可以使用 lerna init –independent 命令初始化项目,这个时候就为独立模式(Independent mode)。 固定模式中,packages下的所有包共用一个版本号(version),会自动将所有的包绑定到一个版本号上(该版本号也就是lerna.json中的version字段),所以任意一个包发生了更新,这个共用的版本号就会发生改变。 独立模式允许每一个包有一个独立的版本号,在使用lerna publish命令时,可以为每个包单独制定具体的操作,同时可以只更新某一个包的版本号。此种模式时,lerna.json中的version字段指定为independent即可。
lerna bootstrap
在每个 package 下面执行 npm install
根据各个 package 下 package.json 里面的 dependencies 和 devDependencies 配置,使用 symlink 在各个 package 的 node_modules 下面建立引用关系
在每个 package 下执行 npm run prepublish
在每个 package 下执行 npm run prepare
lerna bootstrap --hoist
: 如果加上了–hoist参数,那么就是告诉lerna,把所有依赖全部安装到根目录中,然后分别在各自的文件夹中创建软连接指向对应的模块实际路径。
lerna add <pkg> [globs..]
Husky
// package.json
{
"husky": {
"hooks": {
"pre-commit": "npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS",
"pre-push": "npm test",
"...": "..."
}
}
}
Lint-staged
// package.json
{
"husky": {
"hooks": {
"pre-commit": "lint-staged & npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"git add"
]
}
}
Prettier
配置: https://prettier.io/docs/en/configuration.html
// package.json
{
"husky": {
"hooks": {
"pre-commit": "lint-staged & npm test",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"git add"
],
"*.js": [
"prettier --config ./.prettierrc --write",
"git add"
]
}
}
Commitlint
npm install --save-dev @commitlint/config-conventional @commitlint/cli
// 生成配置文件commitlint.config.js,当然也可以是 .commitlintrc.js
echo "module.exports = {extends: ['@commitlint/config-conventional']};" > commitlint.config.js
// package.json
"husky": {
"hooks": {
"pre-commit": "npm run test",
"commit-msg": "commitlint -e $HUSKY_GIT_PARAMS"
}
}
standard-version
npm i --save-dev standard-version
{
"scripts": {
"release": "standard-version"
}
}
conventional-changelog-cli
{
"scripts": {
"version": "conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md"
}
}