01
技术栈
01
lerna
lerna 是一个monorepo工具库,用于高效便捷的管理多个包的构建发布
官网地址:lerna.js.org/
02
**pnpm
**
pnpm 与 npm类似,是一个包管理工具,它最大的特点是使用软链和硬链的方式平级的管理包,提升了装包的速度,节省了磁盘空间,如下包的关系图:
官网地址:pnpm.io/zh/
03
备选技术栈
rush + pnpm, 功能更强大,更好的包别名支持,更好的包版本管理,rush相比learn 要更复杂一些,同时文档相对零散。
02
常用命令
01
learn核心命令
1.lerna init #初始化项目
2.lerna create core #添加新项目
3.lerna add xxx #添加依赖
4.lerna link #packages项目依赖
5.lerna exec #执行linux命令
6.lerna run #执行npm命令
7.lerna clean #清空依赖
8.lerna bootstrap #重装依赖
9.lerna version #管理版本号
10.lerna changed #查看变更
11.lerna diff #查看diff
12.lerna publish #发布项目
02
私仓部署核心命令(上)
-
windows : C:\Users\liyan\AppData\Roaming\verdaccio 配置文件地址
max/linux: ~/.config/verdaccio
-
底部 listen: 0.0.0.0:4873 端口号
-
verdaccio 或者 pm2 start verdaccio 启动私仓
-
仓库文件:C:\Users\liyan\AppData\Roaming\verdaccio\storage(windows)
仓库⽂件: ~/.local/share/verdaccio/storage/ (mac/linux)
-
npm root -g 查看全局地址索引
-
初始化项目 npm init —scope
-
为域(scope)添加用户
npm adduser —registry= —scope=
03
私仓部署核心命令(中)
-
npm adduser —registry http://localhost:4873
-
npm login —registry http://localhost:4873
-
npm whoami(身份验证) npm logout(退出)
-
npm unpublish arcgis-rollup —force
-
pnpm install @gis/utils -D
-
pnpm confit set registry 地址
-
nrm add local http://localhost:4873
-
nrm use local
-
下载配置.npmrc 发布配置 package.json (.npmrc优先)
04
私仓部署核心命令(下)
-
pnpm i xxx —filter @gis/core
-
lerna add @gis/core packages/utils/
-
pnpm add @gis/core --filter @gis/utils
-
pnpm add lodash -r/-w 为每个项目或全局添加依赖
-
pnpm run build —filter @gis/utils
-
lerna run test -scope=@gis/core
-
lerna publish from-package 初次发版
-
lerna changed 发版前校验需要更改的包
03
实践
01
**私有源 verdaccio
**
verdaccio搭建私服,verdaccio的具体使用,可以参考Verdaccio 私服搭建
02
私初始化仓库
- 全局安装lerna 和 pnpm
npm i lerna pnpm -g
也可以不全局安装lerna
2. 创建仓库
mkdir lerna-libs //创建文件夹
cd lerna-libs
pnpm init
git init
lerna init // init 会创建lerna.json配置文件并将lerna依赖添加到package.json中的devDependencies
pnpm i // 这里主要是安装仓库learn
3. 相关配置
pnpm-workspace.yaml(根目录下新建)
packages:
- 'packages/*' // 这里为包的路径
.gitignore
node_modules/
lerna.json
{
// 这里的schema主要用于配置智能提示
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"npmClient": "pnpm", // 由于我们使用的pnpm,这里需要配置成pnpm
"useNx": true,
"useWorkspaces": true,
"packages": [
"packages/*"
],
"version": "0.0.0"
}
.npmrc
registry = http://localhost:4873 //私有源地址
auto-install-peers = true //是否自动安装子包,pnpm默认不安装子包的
//是否共享lockfile文件,如果每个子包引用的外部包都很多的话,建议改为false
//否则后续随着包的越来越庞大,装包速度可能会直线下降
shared-workspace-lockfile = false
03
私仓包开发
1. 创建子包
这里我们创建两个子包 @map/core 和 @map/utils,可以自己手动创建,和初始化一个普通的项目是一样的,也可以通过lerna命令创建,这里我们通过lerna命令创建,如下:
lerna create @map/core
lerna create @map/utils
2.包引用
正常例如 @map/utils 引用 @map/core 的话,要么使用相对路径,要么需要将@map/core 先发包,通过lerna我们可以在本地就可以直接对 @map/utils进行引用
learn 命令如下:
lerna add @map/core packages/utils //第一种方式
lerna add @map/core --scope=@map/utils //第二种方式
这里可能会报
如果报这个错误,是因为lerna.json中没有配置 packages:["packages/*"]
也会报如下错误:
learn 5 版本以后,如果使用pnpm,lerna add 就无法使用,具体原因尚未知,
这里我们可以使用pnpm 命令来代替,另外pnpm 支持别名,如下命令:
pnpm add @map/core --filter @map/util
代码中引用
提示:lerna 5版本之前通过pnpm安装的包,由于带了workspace:这个前缀,lerna无法发包,需要手动或者通过脚本删掉这个前缀,5版本以后支持pnpm的workspace:前缀了
04
发包
最关键的最后一步,
01
git提交
我们需要先将代码提交到GitHub 上,记得先将本地git仓库推送到远程仓库
git add .
git commit -a -m 'init'
git push
02
创建私服用户
npm adduser
npm login
02
发包
lerna publish
至此,一个简单的私仓搭建完成,后续还会基于私仓搭建基于 vue react 的组件库,敬请期待。。。
本文使用 文章同步助手 同步