如何使用lerna进行多包(package)管理

简介: 如何使用lerna进行多包(package)管理

image.png


为什么要用lerna



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


为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包(package),并将每个软件包存放到独立的代码仓库中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等项目以及许多其他项目则是在 一个代码仓库中包含了多个软件包(package)并进行开发。


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


npm初始化



新建文件夹spring-breeze,在集成终端输入

npm init -y

根目录会生成package.json:


{
  "name": "spring-breeze",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}


安装lerna



全局安装lerna

执行:npm i lerna -g

安装完成后执行:lerna init

执行完成后后出现这样的目录结构


- packages(目录)
- lerna.json(配置文件)
- package.json(工程描述文件)


初始化两个package



默认情况下,package是放在packages目录下的.创建包可以使用命令lerna create  [loc]

lerna create core packages/core

lerna create core packages/tools

将packages/core/lib/core.js改为:

'use strict';
console.log("我是core包~~")

将packages/tools/lib/tools.js改为:

'use strict';
console.log("我是tools包~~")

此时目录结构为

-- packages(目录)
  -- core
    ...
    -- lib
      -- core.js
    -- package.json 
    -- README.md
  - tools
    ...
    -- lib
      -- tools.js 
    -- package.json 
    -- README.md
- lerna.json(配置文件)
- package.json(工程描述文件)
...


修改包名



为了防止重名,包名一般改为@组织/包,如现在这个项目core应该改为:@spring-breeze/core;tools改为:@spring-breeze/tools

例如core模块:

  • packages/core/package.json:
{
  "name": "@spring-breeze/core",
  "version": "0.0.1",
  "description": "> TODO: description",
  "author": "******",
  "homepage": "",
  "license": "ISC",
  "main": "lib/core.js",
  "directories": {
    "lib": "lib",
    "test": "__tests__"
  },
  "files": [
    "lib"
  ],
  "repository": {
    "type": "git",
    "url": "******"
  },
  "scripts": {
    "test": "echo \"Error: run tests from root\" && exit 1"
  }
}


安装第三方包lerna add



  • 添加公共依赖

在根目录下执行(在哪个目录执行都一样):lerna add lodash

此时会发现core和tools都被安装了lodash

  • 添加单独依赖

lerna add jquery --scope=core

core就会被安装了jquery


删除依赖lerna clean



执行lerna clean会删除所有包中的node_modules


安装所有依赖lerna bootstrap



执行lerna bootstrap会重新安装所有依赖


测试本地包



如果本地开发的两个包有所关联,用lerna进行调试非常的简单,只需要将需要用的本地包版本号写入依赖执行:lerna link就可以了;例如在core模块使用tools模块

  • package添加依赖:"@spring-breeze/tools": "^0.0.1"


{
  "name": "@spring-breeze/core",
  "version": "0.0.1",
  "description": "> TODO: description",
  "author": "******",
  "homepage": "",
  "license": "ISC",
  "main": "lib/core.js",
  "directories": {
    "lib": "lib",
    "test": "__tests__"
  },
  "files": [
    "lib"
  ],
  "repository": {
    "type": "git",
    "url": "******"
  },
  "dependencies": {
    "@spring-breeze/tools": "^0.0.1"
  },
  "scripts": {
    "test": "echo \"Error: run tests from root\" && exit 1"
  }
}

添加完成之后执行lerna link

  • core中使用:packages/core/lib/core.js
'use strict';
require("@spring-breeze/tools")


node执行core.js就会发现控制台打印:我是tools包~~。这样就可以进行本地的调试了


发布前准备



调试完成就可以发布了,发布流程如下:

  • 注册npm账户
  • 新建组织spring-breeze(根据自己项目而定)
  • 执行npm login
  • 分别在core和utils下的package.json中配置


 "publishConfig": {
    "access": "public"
  }


  • 新建gitignore


*node_modules
  • 新建git仓库,将项目git remote add "你的git仓库",并且提交项目至git仓库


git remote add https://gitee.com/geeksdidi/spring-breeze.git  
git add .   
git commit -m "初始化"
git push -u origin master
  • 新建LICENSE.md(可以是空文件)
  • 修改一个文件执行 lerna publish

注意:每次发布新版本之前都有将代码提交到git上


查看已发布的package



登陆npm官网 即可看到自己发布的package






相关文章
|
安全 JavaScript Java
iOS使用PushKit实现VoIP
iOS使用PushKit实现VoIP
1606 0
|
8月前
|
存储 人工智能 弹性计算
WordPress AI助手操作
本文将介绍如何使用阿里云百炼平台创建知识库与AI助手应用,包括数据上传、模型配置、应用部署及资源清理等步骤,并详细说明了如何在Web页面集成AI助手悬浮框,实现智能对话功能。
618 5
|
人工智能 IDE 程序员
GitHub Copilot 免费了!程序员们的福音来了!
《GitHub Copilot 免费了!程序员们的福音来了!》 近日,GitHub 宣布其 AI 编程助手 GitHub Copilot 现在可以免费使用。曾经每月需支付 10 美元订阅费的 Copilot,现在向所有人开放免费版本,这对个人开发者、初学者和小型团队来说是个大好消息。免费版支持 GPT 和 Claude 模型,并提供每月 2000 次代码补全和 50 条聊天消息等核心功能。用户只需注册或登录 GitHub 账户,在 VS Code 中安装扩展并激活免费版即可使用。此外,Visual Studio Code 也完全免费,进一步降低了开发门槛。 除了
13184 7
GitHub Copilot 免费了!程序员们的福音来了!
|
11月前
|
存储 JSON Java
酷阿鲸森林农场:使用 Java 构建的去中心化区块链电商系统
酷阿鲸森林农场推出基于Java的轻量级区块链电商系统,解决传统农产品电商信任问题。该系统无需以太坊或服务器,通过自研区块链引擎实现去中心化点对点交易,确保数据不可篡改。每个用户节点运行桌面软件参与数据共识,支持订单上链、链同步与验证。项目具备简单轻量、真实可控等优势,适用于农户合作社及小型有机电商,并可扩展签名认证、NFT凭证等功能,推动农业数字主权与数据可信发展。
酷阿鲸森林农场:使用 Java 构建的去中心化区块链电商系统
|
人工智能 自然语言处理 JavaScript
Aider:27.6K Star!这个终端AI编程神器能用语音改代码,自动生成Git记录并提交,接入DeepSeek斩获编程基准最高分
Aider 是一款基于命令行的开源 AI 编程助手,支持多种编程语言和主流 LLM,可自动完成代码修改、Git 提交及语音交互。
2628 1
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
816 8
|
SQL JSON 缓存
玳数科技集成 Flink CDC 3.0 的实践
本文投稿自玳数科技工程师杨槐老师,介绍了 Flink CDC 3.0 与 ChunJun 框架在玳数科技的集成实践。
1103 7
玳数科技集成 Flink CDC 3.0 的实践
|
存储 安全 Android开发
深入探索安卓与iOS的安全性对比
在这篇文章中,我们将探讨安卓和iOS两大操作系统在安全性方面的不同之处。通过分析它们的安全架构、更新机制以及用户数据保护策略,我们可以更好地理解它们各自的优势和不足。无论是对于普通用户还是专业开发者,了解这些信息都是非常有益的。
|
算法 Linux
跟着Iris案例学Seaborn之Histplot
跟着Iris案例学Seaborn之Histplot
823 0
|
JavaScript 容器
form-create-designer中怎么扩展自定义组件
该内容是关于在某个框架(可能是Vue)中导入和使用自定义组件的教程。首先,通过`import`语句引入自定义组件`MyButton`和`FcDesigner`。然后,使用`FcDesigner.component()`或`app.component()`方法挂载组件。接着,定义组件的拖拽规则,包括其在菜单的位置、图标、名称和唯一ID,以及组件的渲染和属性配置规则。最后,将组件的拖拽规则挂载到设计器(`$refs.designer`)中,以便在界面上使用。
897 2

热门文章

最新文章

下一篇
开通oss服务