lerna将大型代码仓库分割成多个独立版本化的软件包

为什么要使用 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将大型代码仓库分割成多个独立版本化的软件包-唐朝资源网

"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官网查看你发布的包

© 版权声明
THE END
喜欢就支持一下吧
点赞247 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片