multiple-repo-forjs-library
🍣WuSongBo
一站式汇总js库
通过Lerna
管理整体架构、changelog、publish,Rollup
进行打包,TypeDoc
进行文档化。
board | 白板 |
bridge | C端和浏览器桥程序 |
im | IM-sdk,包含容云、声网 |
jsBridge | js-bridge,给微信、小程序提供桥的程序库 |
rtc | web-rtc,接入声网、腾讯和即构三家的sdk封装程序库 |
statistics | 第三方统计程序库,包含:baidu、GA、gdt、toutiao、youmeng、mta |
upload | 微信、小程序上传程序库 |
utils | 实用程序库 |
vx | 微信相关jssdk程序库,包含config, login, pay(wechat&miniProgram), share |
waterfall | 瀑布流程序库 |
zhichi | 平台支持库 |
本存储库是monorepo 结构,它利用Lerna 进行依赖项管理。
建议先全局安装 lerna
:
$ npm install lerna -g
## or
$ yarn add lerna -g
所有的js库都存在 /packages
目录中,如下:
## Root
├── packages
| ├── board
| | ├── package.json
| ├── im
| | ├── package.json
├── lerna.json
├── package.json
$ lerna init
## <package>
$ lerna create @mrjl/cli
$ lerna create @mrjl/cli-shared-utils
或者,直接在packages
目录里直接增加目录,但需要自己定义好package.json
完整的配置如下:
{
"name": "@mrjl/utils",
"version": "0.1.0",
"description": "实用程序库",
"keywords": [
"mrjl",
"utils"
],
"author": "wusongbo <camelwu963@126.com>",
"homepage": "https://www.github.com/camelwu/muliRepo4Lib",
"license": "MIT",
"main": "lib/index.js",
"directories": {
"lib": "lib",
"test": "__tests__"
},
"files": [
"lib"
],
"publishConfig": {
"registry": "https://www.npmjs.com/"
},
"repository": {
"type": "git",
"url": "https://www.github.com/camelwu/muliRepo4Lib.git"
},
"scripts": {
"test": "echo \"Error: run tests from root\" && exit 1"
}
}
其中
package
是包的名称,而name
是插件的专有名称。 例如 name:@mrjl/utils
在packages里的目录package就是:utils
。在add操作的时候一定要加@mrjl/
命名空间。就是要使用name
## 为所有 package 增加 chalk 模块
$ lerna add chalk
## 为@mrjl/cli-shared-utils 增加 semver 模块
lerna add semver --scope @mrjl/cli-shared-utils
## 为 mrjl/cli 增加 @mrjl/cli-shared-utils 模块, 内部依赖
lerna add @mrjl/cli-shared-utils --scope @mrjl/cli
$ lerna bootstrap
读取每个的package.json
,安装依赖,并且把跨项目的依赖链接在一起。比如说的packag.json中有:
{
"dependencies": {
"react": "a.b.c",
"cli": "d.e.f"
}
}
执行bootstrap
之后,相当于用npm/yarn安装了react并link了cli
## 全量发
$ lerna publish
## 根据git提交
$ lerna publish from-git
## 全量发
$ lerna publish from-package
- 检查哪些项目应该被publish
- 调整lerna.json中的版本号
- 修改所有的package.json让它们只想正确的版本
- 更新所有的依赖
- 创建新的git commit和tag
- publish
$ lerna run <package>
就可以执行所有对应名字的npm scripts
,还有一个方式是
$ lerna exec --scope=<package>