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

在这里插入图片描述

生成结构

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

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

目录结构

lerna-demo 
	├── lerna.json
	├── node_modules
	├── package-lock.json
	└── package.json

三、复用现有项目

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

执行 init

lerna init

执行命令

执行每个包中的命令

# 运行每个项目中的dev
lerna run dev  
# 同时运行多个命令
lerna run dev,build

执行单个包命令

lerna run dev --scope=v-cart  

--scope: v-cart 包名称

在这里插入图片描述

查看包

lerna ls
在这里插入图片描述

四、配置package相互引用

v-user 添加 index.js

const baseInfo = {
    addr: "成都市",
    age: 20,
    name: "张三",
  };
 
  module.exports = {baseInfo}

v-cart
package.json

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

添加 index.js

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

console.log(JSON.stringify(baseInfo));

运行命令:

yarn # 安装所有包

lerna run test --scope=v-cart

在这里插入图片描述

导入现有的包

lerna import
在这里插入图片描述

五、发布包

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

在这里插入图片描述

在这里插入图片描述

确定项目版本

lerna version --no-private 
#--no-private  过滤掉private 项目

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

发布项目

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

1 . 确保 镜像源是 npm

npm config get registry 
// https://registry.npmjs.org/

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

npm whoami

在这里插入图片描述

添加项目到到git

在这里插入图片描述

发布包到NPM包

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

在这里插入图片描述

发布出错解决方案

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

五、实例代码

github 实例代码

相关推荐

  1. Node Cli workspaces 和 lerna 入门

    2024-07-10 07:38:04       62 阅读
  2. Docker 仓库管理

    2024-07-10 07:38:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 07:38:04       99 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 07:38:04       107 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 07:38:04       90 阅读
  4. Python语言-面向对象

    2024-07-10 07:38:04       98 阅读

热门阅读

  1. CSS 下拉菜单的设计与实现

    2024-07-10 07:38:04       33 阅读
  2. 快速排序算法Python实现

    2024-07-10 07:38:04       32 阅读
  3. python爬虫入门(二)之Requests库

    2024-07-10 07:38:04       24 阅读
  4. RTK_ROS_导航(4):ROS中空地图的生成与加载

    2024-07-10 07:38:04       25 阅读
  5. PCL + Qt + Ribbon 风格(窗口自由组合) demo展示

    2024-07-10 07:38:04       53 阅读
  6. Android Studio Download Gradle 时慢问题解决

    2024-07-10 07:38:04       23 阅读
  7. ASPICE是汽车软件开发中的质量保证流程

    2024-07-10 07:38:04       34 阅读
  8. 游戏开发面试题2

    2024-07-10 07:38:04       36 阅读
  9. 4.10-7.9

    2024-07-10 07:38:04       37 阅读