Lerna入门级实战

152 阅读2分钟

原生脚手架开发痛点分析

1.痛点一:重复操作

  • 多Package本地link
  • 多Package依赖安装
  • 多Package单元测试
  • 多Package代码提交
  • 多Package代码发布

2.痛点:版本一致性

  • 发布时版本一致性
  • 发布后项目依赖版本升级

package越多,管理复杂度越高;

Lerna简介

image.png

lerna 是一种工具,它围绕使用 Git 和 NPM 管理多包来优化工作流库。

优势

1.大幅减少重复操作
2.提升操作的标准化

官网

如何用Lerna开发一个脚手架?

流程图:

image.png

脚手架项目初始化

注意啊!我这里安装的是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,重名会发布失败,可以起个不重名的;

image.png

创建第二个包,给他起名为@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,发现当前还没关联远程分支;

image.png

此时去packages/utils/lib/index.js中加一个log,lerna diff命令就可以查看diff:

image.png

接着在github或者gitee上创建仓库,将本地的代码提交到远程仓库中;

然后再输入lerna publish命令就可以发布成功了( ๑╹ ꇴ╹) グッ!