将大型代码仓库分割成多个独立版本化的 软件包(package)对于代码共享来说非常有用。但是,如果某些更改 跨越了多个代码仓库的话将变得很 麻烦 并且难以跟踪,并且, 跨越多个代码仓库的测试将迅速变得非常复杂。
创新互联建站主要从事网站建设、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务盐湖,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
为了解决这些(以及许多其它)问题,某些项目会将 代码仓库分割成多个软件包(package),并将每个软件包存放到独立的代码仓库中。但是,例如 Babel、 React、Angular、Ember、Meteor、Jest 等项目以及许多其他项目则是在 一个代码仓库中包含了多个软件包(package)并进行开发。
Lerna 是一种工具,针对 使用 git 和 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
执行:npm i lerna -g
安装完成后执行:lerna init
执行完成后后出现这样的目录结构
- packages(目录)
- lerna.json(配置文件)
- package.json(工程描述文件)
默认情况下,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模块:
{
"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 lodash
此时会发现core和tools都被安装了lodash
添加单独依赖
lerna add jquery --scope=core
core就会被安装了jquery
执行lerna clean会删除所有包中的node_modules
执行lerna bootstrap会重新安装所有依赖
如果本地开发的两个包有所关联,用lerna进行调试非常的简单,只需要将需要用的本地包版本号写入依赖执行:lerna link就可以了;例如在core模块使用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": "******"
},
"dependencies": {
"@spring-breeze/tools": "^0.0.1"
},
"scripts": {
"test": "echo \"Error: run tests from root\" && exit 1"
}
}
添加完成之后执行lerna link
'use strict';
require("@spring-breeze/tools")
node执行core.js就会发现控制台打印:我是tools包~~。这样就可以进行本地的调试了
调试完成就可以发布了,发布流程如下:
"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官网 即可看到自己发布的package