当前位置:   article > 正文

Monorepo仓库管理策略之 Lerna

Monorepo仓库管理策略之 Lerna

前言:

将大型代码仓库分割成多个独立版本化的 软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且, 跨越多个代码仓库的测试将迅速变得非常复杂。

一、简介

Lerna 是一种工具,针对 使用 git 和 npm 管理多软件包代码仓库的工作流程进行优化

特点:

  • Lerna 对任意数量的项目运行命令,它以最有效的方式、以正确的顺序执行
  • Lerna 管理你的发布流程,从版本管理到发布到 NPM
  • Lerna 速度很快,甚至比大多数同类解决方案还要快

二、新建项目使用

安装

注意: addbootstrap link 三个命令在v7后都不在维护

mkdir lerna-demo && cd lerna-demo
npm i lerna -g  // 目前是 8.1.6
lerna -h
  • 1
  • 2
  • 3

在这里插入图片描述

生成结构

你将启动并运行一个工作 git 存储库,包括 npm 工作区,并且 lerna 可用于创建、版本控制和发布你想要开发的任何包

lerna init
# --independent/-i – 使用独立的 版本控制模式。
# or
npx lerna init --packages="packages/*" #手动指定一组要匹配的模式
  • 1
  • 2
  • 3
  • 4

目录结构

lerna-demo 
	├── lerna.json
	├── node_modules
	├── package-lock.json
	└── package.json
  • 1
  • 2
  • 3
  • 4
  • 5

三、复用现有项目

我们已可以使用现有的项目来,来用 lerna init现有项目入口,接下来的项目讲解将会使用这个现有项目

执行 init

lerna init
  • 1

执行命令

执行每个包中的命令

# 运行每个项目中的dev
lerna run dev  
# 同时运行多个命令
lerna run dev,build
  • 1
  • 2
  • 3
  • 4

执行单个包命令

lerna run dev --scope=v-cart  
  • 1

--scope: v-cart 包名称

在这里插入图片描述

查看包

lerna ls
在这里插入图片描述

四、配置package相互引用

v-user 添加 index.js

const baseInfo = {
    addr: "成都市",
    age: 20,
    name: "张三",
  };
 
  module.exports = {baseInfo}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

v-cart
package.json

{
  "scripts": {
+    "build": "echo build v-cart",
  },
  "dependencies": {
+    "v-user":"1.0.0"
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

添加 index.js

// import {baseInfo} from 'v-user'
let {baseInfo} = require('v-user')

console.log(JSON.stringify(baseInfo));
  • 1
  • 2
  • 3
  • 4

运行命令:

yarn # 安装所有包

lerna run test --scope=v-cart
  • 1
  • 2
  • 3

在这里插入图片描述

导入现有的包

lerna import
在这里插入图片描述

五、发布包

先将本地代码跟 git 仓库进行链接,如果是新分支,需要将分支先推送上去,我这以创建新的分支lerna 为例

在这里插入图片描述

在这里插入图片描述

确定项目版本

lerna version --no-private 
#--no-private  过滤掉private 项目
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

发布项目

lerna publish from-package
#--no-private  过滤掉private 项目
  • 1
  • 2

1 . 确保 镜像源是 npm

npm config get registry 
// https://registry.npmjs.org/
  • 1
  • 2

2. 查看是否登录 npm, 没有就请 npm login 进行登录

npm whoami
  • 1

在这里插入图片描述

添加项目到到git

在这里插入图片描述

发布包到NPM包

v-cart 项目已经被占用,所有我们将项目整体换个名字 ziyu-xxx 开头

在这里插入图片描述

发布出错解决方案

如果某些包已成功发布而其他包未成功发布,则lerna publish可能使存储库处于与某些更改的文件不一致的状态。那么你可以运行 lerna publish from-git 来重试发布相同的已标记版本,而不必在重试时再次更改版本。

五、实例代码

github 实例代码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/826763
推荐阅读
相关标签
  

闽ICP备14008679号