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

  • 如何使用lerna进行多包(package)管理已关闭评论
  • 156 次浏览
  • A+
所属分类:Web前端
摘要

将大型代码仓库分割成多个独立版本化的 软件包(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