为什么要使用 lerna
将大型代码存储库拆分为多个独立版本的包对于代码共享很有用。但是,如果跨多个存储库,某些更改可能会变得繁琐且难以跟踪,并且跨多个存储库的测试很快就会变得非常复杂。
为了解决这些(以及许多其他)问题,一些项目将代码存储库拆分为多个包,并将每个包放在单独的代码存储库中。但是,诸如 Babel、React、Angular、Ember、Meteor、Jest 等许多项目在一个代码库中包含和开发多个包。
Lerna 是一个针对使用 git 和 npm 管理多包存储库的工作流进行了优化的工具
npm 初始化
新建文件夹spring-breeze并进入集成终端
npm 初始化 -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(工程描述文件)
初始化两个包
默认情况下,包被放置在包目录中。要创建包,请使用命令 lerna create [loc]
lerna 创建核心包/核心
lerna 创建核心包/工具
将 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(工程描述文件)
...
修改包名
为了防止重名,包名一般改成@organization/package。比如这个项目的核心应该改成:@spring-breeze/core;工具应改为:@spring-breeze/tools
示例核心模块:
{
"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 clean
执行 lerna clean 会删除所有包中的 node_modules
安装所有依赖 lerna bootstrap
执行 lerna bootstrap 将重新安装所有依赖项
测试本地包
如果本地开发的两个包是相关的,用lerna调试就很简单了。只需要写下依赖执行时使用的本地包的版本号:lerna link;例如,使用核心模块中的工具模块
{
![图片[1]-lerna将大型代码仓库分割成多个独立版本化的软件包-唐朝资源网](https://images.43s.cn/wp-content/uploads//2022/06/1655741484578_3.gif)
"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链接
'use strict';
require("@spring-breeze/tools")
node执行core.js时,会发现控制台打印:我是工具包~~。这允许本地调试
准备发射
调试好后就可以发布了。发布流程如下:
"publishConfig": {
"access": "public"
}
*node_modules
git remote add https://gitee.com/geeksdidi/spring-breeze.git
git add .
git commit -m "初始化"
git push -u origin master
注意:每次发布新版本时,代码都会提交到git
查看已发布的包
登录npm官网查看你发布的包
暂无评论内容