一.bolt(停止维护)
公共库组件的特征之一就是代码复用率很高,改其中一部分代码,大部分组件就都需要更新一遍依赖,所以如何快速更新依赖、添加版本号、发布组件、上传组件代码就成了一个问题。这里我使用了bolt来批量管理组件的迭代
1.安装工具
首先使用 yarn 将 Bolt 安装到全局环境中:
yarn global add bolt
2.创建Bolt
Create a new Bolt package in the current directory:
bolt init//在当前目录下创建新的bolt
bolt init --yes //将已有的文件夹转变为bolt
/**如果报错bolt不是命令,可以用npm重新安装bolt,命令如下 */
// npm i bolt --global
当前目录下会出现一个package.json
{
"name": "normal-charts",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"bolt": {
"workspaces": [
"src/*"
]
},
"devDependencies": {
"standard-version": "^9.3.2"
},
"dependencies": {
"@easyv/charts": "^1.1.8"
}
}
3.Bolt文件
将相同依赖包/需批量操作的代码库放入文件
"scripts": {
"start": "easyv dev",
"publishToTest": "easyv publish --host=online basicAreaV2"
},
4.Bolt的使用
主要使用场景示例
//批量发布组件
bolt ws run publishToTest
//批量更新公共库
bolt ws exec -- npm install @easyv/charts
bolt ws exec -- git pull
bolt ws exec -- git add .
bolt ws exec -- git commit -m "测试批量提交"
bolt ws exec -- git push origin master
注:windows电脑用powershell可能会无法执行批量命令,可以试试把终端切换成git bash
二.lerna
优势:
社区较大,维护活跃,依赖更加灵活,支持清理依赖(lerna clean),支持链接本地依赖(lerna bootstrap)
1.安装并初始化
mkdir lerna-repo
cd 目标文件
npx lerna init
这将会创建一个 lerna.json
配置文件和一个 package
文件夹,如下
lerna-repo/
packages/
package.json
lerna.json
2.两种模式(Fixed 和 Independent)
Fixed 模式:所有包共享一个版本号,适合紧密相关的包。(默认)
Independent 模式:每个包有独立的版本号,适合相对独立的包(lerna init --independent)
3.文件
lerna:
{
"version": "0.0.0", // 版本管理模式
"packages": ["packages/*"], // 包的位置
"npmClient": "yarn", // 包管理器
"useWorkspaces": true, // 是否使用 Yarn Workspaces
"command": {
"publish": {
"ignoreChanges": ["*.md"], // 忽略的文件
"message": "chore(release): publish", // 提交信息
"registry": "https://registry.npmjs.org/" // 发布到的 npm 仓库
},
"bootstrap": {
"hoist": true // 提升依赖
}
}
}
同时你可以在每个子项目中定义相同的脚本,这样使用lerna运行的时候就会自动查找脚本并依次运行,代码如下
{
"scripts": {
"build": "tsc -p .",
"test": "jest"
}
}
直接运行lerna build即可运行所有子项目
如果觉得每一个文件定义很麻烦,可以直接在根目录packge.json中定义脚本
{
"scripts": {
"publishToTest": "lerna exec -- easyv publish --host=online basicAreaV2"
}
}
npm run publishToTest
并且运行全局脚本即可每个子项目运行
同样的也可以定义命令过滤或者选中某些文件
4.常见命令
1、lerna bootstrap
初始化项目依赖以及建立link关系以及预发布处理
2、lerna publish
lerna publish做了一套npm标准的发布流程管理
3、lerna changed
用来查看发生改变的package,即预发布的包
4、lerna clean
用来清空所有package的node_moudles依赖
5、lerna run
用来执行每个package下的scripts命令
6、lerna add
3.Nx
Lerna 和 Yarn Workspaces 专注于包的管理和发布,而 Nx 则同时涵盖了开发、构建、测试、依赖管理和性能优化等多个方面。并且Nx兼容lerna