如何使用lerna进行多包(package)管理
为什么要用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)管理的更多相关文章
- (转)-编写第一个ROS(创建工作空间workspace和功能包package)
原文网址:http://www.cnblogs.com/liuamin/p/5704281.html 刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配 ...
- GridBagLayout:网格包布局管理器
GridBagLayout:网格包布局管理器 GridBagLayout可以说是布局管理器Layout中最复杂的一个,其中涉及到的参数也比较得多,比如说: GridBagConstraints g ...
- 编写第一个ROS(创建工作空间workspace和功能包package)
刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个 ...
- Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- Java - 25 Java 包(package)
Java 包(package) 为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包 ...
- Java学习笔记三十一:Java 包(package)
Java 包(package) 一:包的作用: 如果我们在使用eclipse等工具创建Java工程的时候,经常会创建包,那么,这个包是什么呢. 为了更好地组织类,Java 提供了包机制,用于区别类名的 ...
- ROS知识(3)----功能包package编译的两种方式
ROS的包编译有两种方法(我知道的),一种是用rosmake,这种方法简单:另一种是用catkin_make,这种方法更方便包的管理和开发.这两种方法都是先建立工作空间workspace(类似于vs下 ...
- npm package管理
每个项目都包含一个package.json文件用来管理项目依赖的包以及项目相关信息. 其中比较总要的就是dependencies和devDependencies两项,分别指定了项目运行所依赖的模块.项 ...
- Node.js 第三方包的安装、升级、卸载,以及包依赖管理
本地安装: npm install package-name 全局全装: npm install -g package-name 举个栗子 全局安装 React项目的脚手架 npm install ...
随机推荐
- 四、初识Java
一.Java三大版本 JavaSE:标准版(桌面程序,控制台开发......) JavaME:嵌入式开发(手机,小家电......)[了解就行] JavaEE:E企业级开发(Web端,服务器开发... ...
- POP3协议(电子邮件邮局协议)中UIDL和TOP命令在实际使用中的作用
POP3是电子邮件协议中用于接收邮件的协议,相较于发送邮件的SMTP协议,POP3的命令要多一些.主要的命令有LIST.STAT.RETR.DELE.UIDL.TOP.QUIT,以及用于登录邮箱的US ...
- php进制转换
前端html页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- Kotlin 之 let、with、run、apply、also 函数的使用
一.内联拓展函数 let let 扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择:let函数另一个作用就是可以避免写一些判断null的操 ...
- HCIE笔记-第十节-静态路由
协议 :标识 前方的目的网络 是通过什么协议形成的 优先级:代表形成路由的协议的优先级数值 [厂商规定] 开销值:代表该路由协议形成此路由时的开销 -- 不同的协议计算开销值的方式有区别(越小越优) ...
- C#/VB.NET 将RTF转为HTML
RTF文档即富文本格式(Rich Text Format)的文档.我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,如转为DOCX/DOC.PDF或者HTML,以满足程序设计需 ...
- 发布nuget包的正确姿势---cicd自动打包发布nuget包
最轻便的发布nuget包方式,方便cicd自动打包发布nuget包 首先新建项目 项目名随便取,这里就叫它GuiH.ClassLibrary 默认即可,需要改目标版本时,等创建好再改 项目创建好了 随 ...
- 初踩坑JS加载与audio接口:点击头像开始/暂停背景音乐
背景 封楼期间难得空闲,也静不下心学习,空闲之余萌生了重做引导单页的想法.因为之前都是扒站(某大公司游戏官网)+小改,一来虽然很炫酷,但本人水平有限,仍有很大一部分JS无从下手,甚至是看不懂|-_-| ...
- selenium模块跳过用户名密码验证码输入,加载浏览器标签和cookie,进行翻页爬虫多页动态加载的数据(js)
能解决登陆一次后,之后不需要二次登陆的动态加载数据,网页保存的cookie和标签,加入到selenium自动化测试浏览器中 1 from selenium import webdriver 2 imp ...
- Ubuntu22.04搭建PWN环境
前言 最近尝试在Ubuntu最新的版本22.04版本上搭建PWN环境,有了之前在kali上搭建的经验,总的来说问题不大.但搭建的时候还是有不少地方出错了,好在搭建的过程中不断的拍摄快照,所以整个过程还 ...