为什么要用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

如何使用lerna进行多包(package)管理的更多相关文章

  1. (转)-编写第一个ROS(创建工作空间workspace和功能包package)

    原文网址:http://www.cnblogs.com/liuamin/p/5704281.html 刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配 ...

  2. GridBagLayout:网格包布局管理器

    GridBagLayout:网格包布局管理器   GridBagLayout可以说是布局管理器Layout中最复杂的一个,其中涉及到的参数也比较得多,比如说: GridBagConstraints g ...

  3. 编写第一个ROS(创建工作空间workspace和功能包package)

    刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个 ...

  4. Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  5. Java - 25 Java 包(package)

    Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...

  6. Java学习笔记三十一:Java 包(package)

    Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...

  7. ROS知识(3)----功能包package编译的两种方式

    ROS的包编译有两种方法(我知道的),一种是用rosmake,这种方法简单:另一种是用catkin_make,这种方法更方便包的管理和开发.这两种方法都是先建立工作空间workspace(类似于vs下 ...

  8. npm package管理

    每个项目都包含一个package.json文件用来管理项目依赖的包以及项目相关信息. 其中比较总要的就是dependencies和devDependencies两项,分别指定了项目运行所依赖的模块.项 ...

  9. Node.js 第三方包的安装、升级、卸载,以及包依赖管理

    本地安装: npm install package-name 全局全装: npm install -g  package-name 举个栗子 全局安装 React项目的脚手架 npm install ...

随机推荐

  1. 20220406Java

    记个笔记 字符串操作类中s1.compareTo(s)规则: Compares two strings lexicographically. The comparison is based on th ...

  2. 【转载】Java密钥库及keytool使用详解

    ---------------- 版权声明:本文为CSDN博主「adrninistrat0r」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https: ...

  3. Mysql入门学习day2随笔2

    事务 什么是事务 要么都成功,要么都失败 事务原则 原子性:针对一个事务,两个步骤一起成功或一起失败 一致性:最终一致性,例如A.B之间的转账,无论两个账户如何操作,两账户的总价值不会变 隔离性:针对 ...

  4. 【分享汇总】25个主题分享,360°领略OpenHarmony最新技术版图

    2021年10月,开放原子开源基金会旗下开源项目 OpenAtom OpenHarmony (以下简称"OpenHarmony") 应邀参加华为2021 HDC 开发者大会,并组织 ...

  5. android软件简约记账app开发day06-将记账条目添加到数据库并且绘制备注页面

    android软件简约记账app开发day06-将记账条目添加到数据库并且绘制备注页面 首先写添加到数据库 在DBOpenHelper中添加创建记账表的语句 //创建记账表 sql = "c ...

  6. qt在linux下引用x11库编译错误的解决办法

    首先安装x11的开发包,以debian9为例:sudo apt install xorg-dev这个解决.h头文件和.a库文件在qt的.pro文件中加入:LIBS += -lX11这个解决连接错误,注 ...

  7. 清除安装的Rancher、K8s

    #清除主机的所有容器.挂载.镜像(慎用) docker stop $(docker ps -aq) docker system prune -f docker volume rm $(docker v ...

  8. ThinkPhP $map用法

    ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于CURD等任何操作,作为where方法的参数传入即可,下面来一一讲解查询语言的内涵.查询方式ThinkPHP可以支 ...

  9. 为什么Redis要比Memcached更火?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 前言 我们都知道,Redis和Memcached都是内存数据库,它们的访问速度非常之快.但我们 ...

  10. c++:-3

    上一节学习了C++的函数:c++:-2,本节学习C++的数组.指针和字符串 数组 定义和初始化 定义 例如:int a[10]; 表示a为整型数组,有10个元素:a[0]...a[9] 例如: int ...