原生脚手架开发痛点分析
1.痛点一:重复操作
- 多Package本地link
- 多Package依赖安装
- 多Package单元测试
- 多Package代码提交
- 多Package代码发布
2.痛点:版本一致性
- 发布时版本一致性
- 发布后项目依赖版本升级
package越多,管理复杂度越高;
Lerna简介
lerna 是一种工具,它围绕使用 Git 和 NPM 管理多包来优化工作流库。
优势
1.大幅减少重复操作
2.提升操作的标准化
如何用Lerna开发一个脚手架?
流程图:
脚手架项目初始化
注意啊!我这里安装的是lerna@3.22.1
mkdir mj-cli-dev
cd mj-cli-dev
npm init -y
cpm i -g lerna@3.22.1
lerna init
手动创建一个.gitignore文件;
.vscode
.idea
node_modules
packages/**/node_modules
packages/**/packages-lock.json
创建package
创建两个packages,第一个package是包含我们脚手架的bin文件,这个package用来生成脚手架; 第二个package是工具类,提供一下工具方法;
lerna create core
这里的包名不能叫core,重名会发布失败,可以起个不重名的;
创建第二个包,给他起名为@mj-cli-dev/utils, @mj-cli-dev就需要在npm创建一个group,创建group是为了让core不被重名,所以得先在npm上把 @mj-cli-dev注册一下;
lerna create utils
两个package创建完成;
lerna add mj-cli-test
会自动给我所有的package安装依赖mj-cli-test;
lerna add @mj-cli-test 【指定目录】
对指定的目录安装依赖;
lerna clean
用来清除依赖,它会把node_modules文件夹删除,但还需要手动清除package.json中的dependencies的依赖;
先在core的package.json中增加依赖:
"dependencies": {
"@mj-cli-dev/utils": "^1.0.0"
}
终端输入命令后,就可看到node_modules目录下生成了软链接;
脚手架开发和测试
执行删除node_modules目录的命令;
lerna exec -- rm -rf node_modules/
如果想删除指定包的node_modules,需要增加--scope的参数;
lerna exec --scope @mj-cli-dev/core -- rm -rf node_modules/
执行bootstrap的命令可以恢复刚才的删除操作;
lerna bootstrap
run命令像npm run 一样,可以帮我们执行package.json中的scripts;
npm run test
脚手架发布上线
查看包的更新;
lerna changed
做一个代码的提交;
git add .
git commit -m "init"
lerna version
查看version,发现当前还没关联远程分支;
此时去packages/utils/lib/index.js中加一个log,lerna diff命令就可以查看diff:
接着在github或者gitee上创建仓库,将本地的代码提交到远程仓库中;
然后再输入lerna publish命令就可以发布成功了( ๑╹ ꇴ╹) グッ!