在我们开发多package项目的时候会遇到一些耗费大量人力物力的工作, 比如版本同步、 package间调试、统一发布等、参数解析等, lerna可以帮助我们更加高效的组织和管理我们的项目, 家喻户晓的vue-cli、cra、babel都是使用lerna进行管理的, 还等什么? 赶紧学起来吧!
官方文档
初始化项目
# 创建文件夹
$ mkdir scaffold
# 初始化npm
$ npm init -y
# 安装lerna
$ pnpm add lerna
# 最好我们全局也安装一下, 方便我们使用lerna命令
$ pnpm add lerna -g
# lerna初始化
$ lerna init
添加package
这里我们添加两个包arcjs作为主包, arcjs-lib作为分包供主包调用
lerna create arcjs
lerna create arcjs-lib
文件结构
文件内容
arcjs-core
#! /usr/bin/env node
const arcjsLib = require("arcjs-lib")
arcjsLib()
module.exports = arcjs;
function arcjs() {
// TODO
console.log("arcjs");
}
arcjs-core下面的package.json记得加入bin字段
"bin": {
"arcjs": "lib/arcjs.js"
},
arcjs-lib
'use strict';
module.exports = arcjsLib;
function arcjsLib() {
// TODO
console.log("log from arcjs-lib");
}
记得检查package.json中的main字段指定的内容"main": "lib/arcjs-lib.js"
最重要的命令 -- lerna link
lerna link和我们的npm link使用起来有点不一样, up主在一开始使用的时候也是有点困惑的
npm link是在当前包下把当前包链接到全局, 而使用的时候要执行npm link [当前包名]来链接当node_modules目录下, 然后还要手动在package.json中的dependencies中添加当前包及版本号- 而
lerna link则是先在package.json中的dependencies中添加需要使用的分包及版本号, 然后到lerna目录下执行lerna link这样就能在本地调试其他包啦, 可以说是非常方便
lerna发包 -- lerna publish
lerna是基于git的node包管理工具, lerna publish是基于上一次git commit的(特别重要), 如果不commit是发不了的, 所以我们先在gitee新建代码仓库并在本地进行添加
git remote add origin [你的仓库地址]
常规commit: git commit -am [commit 信息]
设置上游分支: git branch --set-upstream [远程分支名] 或 git branch -u [远程分支名]
所有的都设置好了以后就可以通过lerna publish进行发布啦(再次提醒包名不要和别人的包名重复哦, 要不然发布不了的)
最后, 我们再来看看lerna其他的常用命令
lerna version用来sync package的版本号的, 我试了一下, 如果你把各个包的版本号改一下, 然后你在执行lerna publish的时候还是会自动执行lerna version命令, 然后版本号就会自动变成你patch的那个版本号lerna bootstrap用来初始化依赖, 可以理解为在所有pakcage中执行npm install吧lerna list查看所有的packagelerna changed查看更改内容lerna diff查看更改内容lerna exec用来在所有的的package下执行shell命令, 示例:lerna exec -- rm -rf node_modules一定要加--哦lerna run用来在所有的package执行npm run命令, script没有改命令的会跳过, 比如我们需要在所有的package中跑test,lerna run test就会运行所有package下的npm run test(如果有的话)lerna add在所有的package下安装某个依赖lerna clean清空所有package下的node_modules依赖
lerna这个工具非常好用, 而且使用起来也是相对比较简单的, 如果使用过程中遇到问题, 多试试就能跑通啦, 好啦, 今天的分享就到这里啦, 明天就是周末, 先断更几天休息一下, 祝大家周末快乐哟!