php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 533|回复: 0

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

[复制链接]

3142

主题

3152

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7956
贡献
0
注册时间
2021-4-14
最后登录
2024-11-22
在线时间
763 小时
QQ
发表于 2022-6-20 21:37:05 | 显示全部楼层 |阅读模式
为什么要用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





上一篇:打击网站采集:搜狗搜索“石破算法”正式生效
下一篇:CVPR2022 | 弱监督多标签分类中的损失问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 09:19 , Processed in 0.271040 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表