learn + pnpm 搭建morerepo

753 阅读4分钟

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

私仓部署核心命令(上)

  1. windows : C:\Users\liyan\AppData\Roaming\verdaccio  配置文件地址

    max/linux: ~/.config/verdaccio

  2. 底部 listen: 0.0.0.0:4873 端口号

  3. verdaccio 或者 pm2 start verdaccio 启动私仓

  4. 仓库文件:C:\Users\liyan\AppData\Roaming\verdaccio\storage(windows)

    仓库⽂件: ~/.local/share/verdaccio/storage/  (mac/linux)

  5. npm root -g 查看全局地址索引

  6. 初始化项目 npm init —scope

  7. 为域(scope)添加用户

npm adduser —registry= —scope=

03

私仓部署核心命令(中)

  1. npm adduser —registry http://localhost:4873

  2. npm login —registry http://localhost:4873

  3. npm whoami(身份验证) npm logout(退出)

  4. npm unpublish arcgis-rollup —force

  5. pnpm install @gis/utils -D

  6. pnpm confit set registry 地址

  7. nrm add local http://localhost:4873

  8. nrm use local

  9. 下载配置.npmrc 发布配置 package.json (.npmrc优先)

04

私仓部署核心命令(下)

  1. pnpm i xxx —filter @gis/core

  2. lerna add @gis/core packages/utils/

  3. pnpm add @gis/core --filter @gis/utils

  4. pnpm add lodash -r/-w    为每个项目或全局添加依赖

  5. pnpm run build —filter @gis/utils

  6. lerna run test -scope=@gis/core

  7. lerna publish from-package 初次发版

  8. lerna changed 发版前校验需要更改的包

03

实践

01

**私有源 verdaccio
**

verdaccio搭建私服,verdaccio的具体使用,可以参考Verdaccio 私服搭建

02

私初始化仓库

  1. 全局安装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

访问http://localhost:4873,如下:

图片

至此,一个简单的私仓搭建完成,后续还会基于私仓搭建基于 vue  react 的组件库,敬请期待。。。

本文使用 文章同步助手 同步