jinbi-utils 1.0.20 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +19 -0
- package/.cz-config.js +55 -0
- package/.dockerignore +3 -0
- package/.editorconfig +12 -0
- package/.eslintignore +8 -0
- package/.eslintrc.js +54 -0
- package/.versionrc.json +9 -0
- package/CHANGELOG.md +49 -49
- package/CHUNK_OPTIMIZER_USAGE.md +132 -0
- package/Dockerfile +3 -0
- package/QUICK_RELEASE.md +85 -0
- package/README.md +189 -189
- package/RELEASE_GUIDE.md +243 -0
- package/api-extractor.json +15 -0
- package/commitlint.config.js +3 -0
- package/jest.config.js +15 -0
- package/package.json +82 -109
- package/rollup.config.chunk-optimizer.js +32 -0
- package/rollup.config.js +73 -0
- package/src/array/index.ts +85 -0
- package/src/build/chunk-optimizer/ARCHITECTURE.md +347 -0
- package/src/build/chunk-optimizer/QUICK_START.md +370 -0
- package/src/build/chunk-optimizer/README.md +240 -0
- package/src/build/chunk-optimizer/core/chunk-generator.ts +166 -0
- package/src/build/chunk-optimizer/core/classifier.ts +148 -0
- package/src/build/chunk-optimizer/core/dependency-reader.ts +138 -0
- package/src/build/chunk-optimizer/examples/basic-usage.ts +234 -0
- package/src/build/chunk-optimizer/index.ts +166 -0
- package/src/build/chunk-optimizer/rules/common-rules.ts +131 -0
- package/src/build/chunk-optimizer/rules/framework-rules.ts +93 -0
- package/src/build/chunk-optimizer/rules/index.ts +27 -0
- package/src/build/chunk-optimizer/test.ts +94 -0
- package/src/build/chunk-optimizer/types.ts +128 -0
- package/src/color/index.ts +58 -0
- package/src/common/index.ts +353 -0
- package/src/constant/common.constant.ts +13 -0
- package/src/date/index.ts +143 -0
- package/src/dom/index.ts +198 -0
- package/src/file/index.ts +319 -0
- package/src/http/apiBuilder/README.md +648 -0
- package/src/http/apiBuilder/api-builder.ts +502 -0
- package/src/http/apiBuilder/example.ts +243 -0
- package/src/http/apiBuilder/index.ts +1 -0
- package/src/http/apiBuilder//345/277/253/351/200/237/345/217/202/350/200/203.md +199 -0
- package/src/http/http.ts +79 -0
- package/src/http/httpEnums.ts +61 -0
- package/src/iam/index.ts +46 -0
- package/src/index.ts +20 -0
- package/src/middleware/requestLogger.middware.ts +371 -0
- package/src/middleware/requestLoggerUnified.ts +371 -0
- package/src/number/index.ts +362 -0
- package/src/object/index.ts +54 -0
- package/src/print/index.ts +102 -0
- package/src/string/index.ts +189 -0
- package/src/utils/curl.ts +108 -0
- package/src/validate/index.ts +100 -0
- package/src/websocket/emitter.ts +39 -0
- package/src/websocket/index.ts +6 -0
- package/src/websocket/manager.ts +151 -0
- package/src/websocket/pinia-store.ts +91 -0
- package/src/websocket/service.ts +34 -0
- package/src/websocket/types.ts +45 -0
- package/test/common/index.test.ts +19 -0
- package/test/date/index.test.ts +107 -0
- package/test/file/index.test.ts +104 -0
- package/test/number/index.test.ts +108 -0
- package/test/object/index.test.ts +20 -0
- package/test/string/index.test.ts +82 -0
- package/tsconfig.json +39 -0
- package/typedoc.json +12 -0
- package/types/file/index.d.ts +7 -0
- package/types/index.d.ts +1 -0
- package/types/websocket/emitter.d.ts +16 -0
- package/types/websocket/index.d.ts +6 -0
- package/types/websocket/manager.d.ts +36 -0
- package/types/websocket/pinia-store.d.ts +25 -0
- package/types/websocket/service.d.ts +13 -0
- package/types/websocket/types.d.ts +34 -0
- package/dist/chunk-optimizer.cjs +0 -703
- package/dist/index.esm.js +0 -2791
- package/dist/index.esm.min.js +0 -15
- package/dist/index.umd.js +0 -2899
- package/dist/index.umd.min.js +0 -16
package/README.md
CHANGED
|
@@ -1,190 +1,190 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
# jbwy-utils 使用说明
|
|
6
|
-
|
|
7
|
-
这是一个实用工具库,包含了多个常用的功能模块。以下是各个模块的详细说明:
|
|
8
|
-
|
|
9
|
-
## 1. Common 模块 (common/index.ts)
|
|
10
|
-
通用函数集合,提供了一些基础工具方法:
|
|
11
|
-
|
|
12
|
-
### 1.1 判空相关
|
|
13
|
-
```typescript
|
|
14
|
-
import { isEmpty } from 'jbwy-utils/common'
|
|
15
|
-
|
|
16
|
-
isEmpty('') // 返回 true
|
|
17
|
-
isEmpty(null) // 返回 true
|
|
18
|
-
isEmpty(undefined) // 返回 true
|
|
19
|
-
isEmpty(12323) // 返回 false
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
### 1.2 环境判断
|
|
23
|
-
```typescript
|
|
24
|
-
import { getDeviceType, getEnvironment, getIsComWx } from 'jbwy-utils/common'
|
|
25
|
-
|
|
26
|
-
// 获取设备类型
|
|
27
|
-
const deviceInfo = getDeviceType()
|
|
28
|
-
// 返回: { isWxWork, isWeixin, isMobileScreen, isMobileAny }
|
|
29
|
-
|
|
30
|
-
// 获取运行环境
|
|
31
|
-
const env = getEnvironment()
|
|
32
|
-
// 返回: 'com-wx-mobile' | 'com-wx-pc' | 'wx-mobile' | 'wx-pc' | 'other'
|
|
33
|
-
|
|
34
|
-
// 判断是否企业微信环境
|
|
35
|
-
const isComWx = getIsComWx()
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### 1.3 URL参数处理
|
|
39
|
-
```typescript
|
|
40
|
-
import { getQueryString, getQueryVariable } from 'jbwy-utils/common'
|
|
41
|
-
|
|
42
|
-
// 获取URL参数
|
|
43
|
-
getQueryString(url, 'key')
|
|
44
|
-
getQueryVariable('key')
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## 2. Number 模块 (number/index.ts)
|
|
48
|
-
数字处理相关函数:
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
import { toThousands, formatFloat, ceil, floor } from 'jbwy-utils/number'
|
|
52
|
-
|
|
53
|
-
// 千分位格式化
|
|
54
|
-
toThousands(12345) // 返回 '12,345'
|
|
55
|
-
toThousands('12323.12') // 返回 '12,323.12'
|
|
56
|
-
|
|
57
|
-
// 格式化小数位
|
|
58
|
-
formatFloat('1.2345') // 返回 '1.23'
|
|
59
|
-
formatFloat('1.2345', 3) // 返回 '1.235'
|
|
60
|
-
|
|
61
|
-
// 向上取整
|
|
62
|
-
ceil('1.234', 2) // 返回 1.24
|
|
63
|
-
|
|
64
|
-
// 向下取整
|
|
65
|
-
floor('1.234', 2) // 返回 1.23
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## 3. String 模块 (string/index.ts)
|
|
69
|
-
字符串处理相关函数:
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
import { formatPhone, formatPhoneHide, formatBank } from 'jbwy-utils/string'
|
|
73
|
-
|
|
74
|
-
// 格式化手机号
|
|
75
|
-
formatPhone('18211572781') // 返回 '182 1157 2781'
|
|
76
|
-
formatPhone('18211572781', '-') // 返回 '182-1157-2781'
|
|
77
|
-
|
|
78
|
-
// 隐藏手机号中间四位
|
|
79
|
-
formatPhoneHide('18211572781') // 返回 '182****2781'
|
|
80
|
-
|
|
81
|
-
// 格式化银行卡号
|
|
82
|
-
formatBank('6282356862823568123') // 返回 '6282 3568 6282 3568 123'
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## 4. Validate 模块 (validate/index.ts)
|
|
86
|
-
提供各种验证函数:
|
|
87
|
-
|
|
88
|
-
```typescript
|
|
89
|
-
import { isMobile, isEmail, isTelephone, isQQ } from 'jbwy-utils/validate'
|
|
90
|
-
|
|
91
|
-
// 验证手机号
|
|
92
|
-
isMobile('13800138000') // 返回 true/false
|
|
93
|
-
|
|
94
|
-
// 验证邮箱
|
|
95
|
-
isEmail('example@email.com') // 返回 true/false
|
|
96
|
-
|
|
97
|
-
// 验证固定电话
|
|
98
|
-
isTelephone('0755-88888888') // 返回 true/false
|
|
99
|
-
|
|
100
|
-
// 验证QQ号
|
|
101
|
-
isQQ('10000') // 返回 true/false
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## 5. File 模块 (file/index.ts)
|
|
105
|
-
文件处理相关函数:
|
|
106
|
-
|
|
107
|
-
```typescript
|
|
108
|
-
import { calcFileSize, fileSizeFormat, compressImg } from 'jbwy-utils/file'
|
|
109
|
-
|
|
110
|
-
// 计算文件大小
|
|
111
|
-
calcFileSize(1024) // 返回 { size: 1, unit: 'KB' }
|
|
112
|
-
|
|
113
|
-
// 格式化文件大小
|
|
114
|
-
fileSizeFormat('1024', 'KB') // 返回 '1MB'
|
|
115
|
-
|
|
116
|
-
// 压缩图片
|
|
117
|
-
compressImg(file, scaleCallback, qualityCallback)
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
## 6. Object 模块 (object/index.ts)
|
|
121
|
-
对象处理相关函数:
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
import { deepEqual, findNodePath } from 'jbwy-utils/object'
|
|
125
|
-
|
|
126
|
-
// 深度比较两个对象是否相等
|
|
127
|
-
deepEqual({a: 10}, {a: 10}) // 返回 true
|
|
128
|
-
deepEqual({a: 10}, {a: 10, b: 20}) // 返回 false
|
|
129
|
-
|
|
130
|
-
// 查找树结构节点路径
|
|
131
|
-
findNodePath(nodeValue, nodeKey, treeArray, childrenKey)
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
## 7. WeChat Work 模块 (wecom/wecom.ts)
|
|
135
|
-
企业微信相关功能:
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
import { initWWConfig } from 'jbwy-utils/wecom'
|
|
139
|
-
|
|
140
|
-
// 初始化企业微信配置
|
|
141
|
-
initWWConfig()
|
|
142
|
-
```
|
|
143
|
-
## 8. middleware 模块 (middleware)
|
|
144
|
-
中间件相关功能:
|
|
145
|
-
### 8.1 requestLogger.middware.ts
|
|
146
|
-
|
|
147
|
-
日志服务 此插件支持使用了koa的nodejs项目
|
|
148
|
-
注意:(recordLogMiddleWare('project-plan-service'))需要传入项目名,日志文件会根据传入的项目名来 命名前缀
|
|
149
|
-
|
|
150
|
-
```typescript
|
|
151
|
-
// midway 项目接入方案 configuration.ts
|
|
152
|
-
import { recordLogMiddleWare } from 'jinbi-utils'
|
|
153
|
-
|
|
154
|
-
export class MainConfiguration {
|
|
155
|
-
@App('koa')
|
|
156
|
-
app: koa.Application;
|
|
157
|
-
|
|
158
|
-
async onReady() {
|
|
159
|
-
//
|
|
160
|
-
this.app.useMiddleware([recordLogMiddleWare('project-plan-service')]);
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
```
|
|
165
|
-
```typescript
|
|
166
|
-
// 只用了koa的nodejs项目接入方案 app.js
|
|
167
|
-
import { recordLogMiddleWare } from 'jinbi-utils'
|
|
168
|
-
|
|
169
|
-
const app = new Koa();
|
|
170
|
-
app.use(bodyParser());
|
|
171
|
-
app.use(router.routes()).use(router.allowedMethods()).use(recordLogMiddleWare('project-plan-service'));
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
## 安装和使用
|
|
175
|
-
|
|
176
|
-
1. 安装依赖:
|
|
177
|
-
```bash
|
|
178
|
-
npm install jbwy-utils
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
2. 引入使用:
|
|
182
|
-
```typescript
|
|
183
|
-
import { isEmpty } from 'jbwy-utils/common'
|
|
184
|
-
import { formatPhone } from 'jbwy-utils/string'
|
|
185
|
-
// ... 按需引入其他功能
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
注意:所有模块都支持按需引入,可以只引入需要使用的功能,减少打包体积。
|
|
189
|
-
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# jbwy-utils 使用说明
|
|
6
|
+
|
|
7
|
+
这是一个实用工具库,包含了多个常用的功能模块。以下是各个模块的详细说明:
|
|
8
|
+
|
|
9
|
+
## 1. Common 模块 (common/index.ts)
|
|
10
|
+
通用函数集合,提供了一些基础工具方法:
|
|
11
|
+
|
|
12
|
+
### 1.1 判空相关
|
|
13
|
+
```typescript
|
|
14
|
+
import { isEmpty } from 'jbwy-utils/common'
|
|
15
|
+
|
|
16
|
+
isEmpty('') // 返回 true
|
|
17
|
+
isEmpty(null) // 返回 true
|
|
18
|
+
isEmpty(undefined) // 返回 true
|
|
19
|
+
isEmpty(12323) // 返回 false
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### 1.2 环境判断
|
|
23
|
+
```typescript
|
|
24
|
+
import { getDeviceType, getEnvironment, getIsComWx } from 'jbwy-utils/common'
|
|
25
|
+
|
|
26
|
+
// 获取设备类型
|
|
27
|
+
const deviceInfo = getDeviceType()
|
|
28
|
+
// 返回: { isWxWork, isWeixin, isMobileScreen, isMobileAny }
|
|
29
|
+
|
|
30
|
+
// 获取运行环境
|
|
31
|
+
const env = getEnvironment()
|
|
32
|
+
// 返回: 'com-wx-mobile' | 'com-wx-pc' | 'wx-mobile' | 'wx-pc' | 'other'
|
|
33
|
+
|
|
34
|
+
// 判断是否企业微信环境
|
|
35
|
+
const isComWx = getIsComWx()
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1.3 URL参数处理
|
|
39
|
+
```typescript
|
|
40
|
+
import { getQueryString, getQueryVariable } from 'jbwy-utils/common'
|
|
41
|
+
|
|
42
|
+
// 获取URL参数
|
|
43
|
+
getQueryString(url, 'key')
|
|
44
|
+
getQueryVariable('key')
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 2. Number 模块 (number/index.ts)
|
|
48
|
+
数字处理相关函数:
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { toThousands, formatFloat, ceil, floor } from 'jbwy-utils/number'
|
|
52
|
+
|
|
53
|
+
// 千分位格式化
|
|
54
|
+
toThousands(12345) // 返回 '12,345'
|
|
55
|
+
toThousands('12323.12') // 返回 '12,323.12'
|
|
56
|
+
|
|
57
|
+
// 格式化小数位
|
|
58
|
+
formatFloat('1.2345') // 返回 '1.23'
|
|
59
|
+
formatFloat('1.2345', 3) // 返回 '1.235'
|
|
60
|
+
|
|
61
|
+
// 向上取整
|
|
62
|
+
ceil('1.234', 2) // 返回 1.24
|
|
63
|
+
|
|
64
|
+
// 向下取整
|
|
65
|
+
floor('1.234', 2) // 返回 1.23
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 3. String 模块 (string/index.ts)
|
|
69
|
+
字符串处理相关函数:
|
|
70
|
+
|
|
71
|
+
```typescript
|
|
72
|
+
import { formatPhone, formatPhoneHide, formatBank } from 'jbwy-utils/string'
|
|
73
|
+
|
|
74
|
+
// 格式化手机号
|
|
75
|
+
formatPhone('18211572781') // 返回 '182 1157 2781'
|
|
76
|
+
formatPhone('18211572781', '-') // 返回 '182-1157-2781'
|
|
77
|
+
|
|
78
|
+
// 隐藏手机号中间四位
|
|
79
|
+
formatPhoneHide('18211572781') // 返回 '182****2781'
|
|
80
|
+
|
|
81
|
+
// 格式化银行卡号
|
|
82
|
+
formatBank('6282356862823568123') // 返回 '6282 3568 6282 3568 123'
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 4. Validate 模块 (validate/index.ts)
|
|
86
|
+
提供各种验证函数:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { isMobile, isEmail, isTelephone, isQQ } from 'jbwy-utils/validate'
|
|
90
|
+
|
|
91
|
+
// 验证手机号
|
|
92
|
+
isMobile('13800138000') // 返回 true/false
|
|
93
|
+
|
|
94
|
+
// 验证邮箱
|
|
95
|
+
isEmail('example@email.com') // 返回 true/false
|
|
96
|
+
|
|
97
|
+
// 验证固定电话
|
|
98
|
+
isTelephone('0755-88888888') // 返回 true/false
|
|
99
|
+
|
|
100
|
+
// 验证QQ号
|
|
101
|
+
isQQ('10000') // 返回 true/false
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## 5. File 模块 (file/index.ts)
|
|
105
|
+
文件处理相关函数:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { calcFileSize, fileSizeFormat, compressImg } from 'jbwy-utils/file'
|
|
109
|
+
|
|
110
|
+
// 计算文件大小
|
|
111
|
+
calcFileSize(1024) // 返回 { size: 1, unit: 'KB' }
|
|
112
|
+
|
|
113
|
+
// 格式化文件大小
|
|
114
|
+
fileSizeFormat('1024', 'KB') // 返回 '1MB'
|
|
115
|
+
|
|
116
|
+
// 压缩图片
|
|
117
|
+
compressImg(file, scaleCallback, qualityCallback)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## 6. Object 模块 (object/index.ts)
|
|
121
|
+
对象处理相关函数:
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
import { deepEqual, findNodePath } from 'jbwy-utils/object'
|
|
125
|
+
|
|
126
|
+
// 深度比较两个对象是否相等
|
|
127
|
+
deepEqual({a: 10}, {a: 10}) // 返回 true
|
|
128
|
+
deepEqual({a: 10}, {a: 10, b: 20}) // 返回 false
|
|
129
|
+
|
|
130
|
+
// 查找树结构节点路径
|
|
131
|
+
findNodePath(nodeValue, nodeKey, treeArray, childrenKey)
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## 7. WeChat Work 模块 (wecom/wecom.ts)
|
|
135
|
+
企业微信相关功能:
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import { initWWConfig } from 'jbwy-utils/wecom'
|
|
139
|
+
|
|
140
|
+
// 初始化企业微信配置
|
|
141
|
+
initWWConfig()
|
|
142
|
+
```
|
|
143
|
+
## 8. middleware 模块 (middleware)
|
|
144
|
+
中间件相关功能:
|
|
145
|
+
### 8.1 requestLogger.middware.ts
|
|
146
|
+
|
|
147
|
+
日志服务 此插件支持使用了koa的nodejs项目
|
|
148
|
+
注意:(recordLogMiddleWare('project-plan-service'))需要传入项目名,日志文件会根据传入的项目名来 命名前缀
|
|
149
|
+
|
|
150
|
+
```typescript
|
|
151
|
+
// midway 项目接入方案 configuration.ts
|
|
152
|
+
import { recordLogMiddleWare } from 'jinbi-utils'
|
|
153
|
+
|
|
154
|
+
export class MainConfiguration {
|
|
155
|
+
@App('koa')
|
|
156
|
+
app: koa.Application;
|
|
157
|
+
|
|
158
|
+
async onReady() {
|
|
159
|
+
//
|
|
160
|
+
this.app.useMiddleware([recordLogMiddleWare('project-plan-service')]);
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
```typescript
|
|
166
|
+
// 只用了koa的nodejs项目接入方案 app.js
|
|
167
|
+
import { recordLogMiddleWare } from 'jinbi-utils'
|
|
168
|
+
|
|
169
|
+
const app = new Koa();
|
|
170
|
+
app.use(bodyParser());
|
|
171
|
+
app.use(router.routes()).use(router.allowedMethods()).use(recordLogMiddleWare('project-plan-service'));
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 安装和使用
|
|
175
|
+
|
|
176
|
+
1. 安装依赖:
|
|
177
|
+
```bash
|
|
178
|
+
npm install jbwy-utils
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
2. 引入使用:
|
|
182
|
+
```typescript
|
|
183
|
+
import { isEmpty } from 'jbwy-utils/common'
|
|
184
|
+
import { formatPhone } from 'jbwy-utils/string'
|
|
185
|
+
// ... 按需引入其他功能
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
注意:所有模块都支持按需引入,可以只引入需要使用的功能,减少打包体积。
|
|
189
|
+
|
|
190
190
|
|
package/RELEASE_GUIDE.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# 📦 发布指南
|
|
2
|
+
|
|
3
|
+
本文档说明如何使用自动化命令发布新版本。
|
|
4
|
+
|
|
5
|
+
## 🚀 快速开始
|
|
6
|
+
|
|
7
|
+
### 一键发布(推荐)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# 发布 patch 版本(默认,如 1.0.8 -> 1.0.9)
|
|
11
|
+
npm run release
|
|
12
|
+
|
|
13
|
+
# 或者明确指定
|
|
14
|
+
npm run release:patch
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### 指定版本类型发布
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# 发布 patch 版本(修复 bug):1.0.8 -> 1.0.9
|
|
21
|
+
npm run release:patch
|
|
22
|
+
|
|
23
|
+
# 发布 minor 版本(新功能):1.0.8 -> 1.1.0
|
|
24
|
+
npm run release:minor
|
|
25
|
+
|
|
26
|
+
# 发布 major 版本(破坏性更新):1.0.8 -> 2.0.0
|
|
27
|
+
npm run release:major
|
|
28
|
+
|
|
29
|
+
# 发布 beta 版本(测试版):1.0.8 -> 1.0.9-beta.0
|
|
30
|
+
npm run release:beta
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 📋 发布流程说明
|
|
34
|
+
|
|
35
|
+
当你运行 `npm run release:patch` 时,会自动执行以下步骤:
|
|
36
|
+
|
|
37
|
+
1. ✅ **运行构建**:`npm run build`
|
|
38
|
+
2. 📝 **更新版本号**:自动修改 `package.json` 中的版本号
|
|
39
|
+
3. 📄 **生成 CHANGELOG**:根据 git commit 自动生成更新日志
|
|
40
|
+
4. 🏷️ **创建 Git Tag**:创建版本标签(如 `v1.0.9`)
|
|
41
|
+
5. 💾 **提交更改**:自动提交版本号和 CHANGELOG 的更改
|
|
42
|
+
6. 📤 **发布到 npm**:执行 `npm publish`
|
|
43
|
+
7. ⬆️ **推送到远程**:推送代码和标签到 Git 仓库
|
|
44
|
+
|
|
45
|
+
## 🔍 发布前检查
|
|
46
|
+
|
|
47
|
+
在发布前,建议手动运行检查脚本:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
./scripts/pre-release-check.sh
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
这个脚本会检查:
|
|
54
|
+
- ✅ Git 状态(是否有未提交的更改)
|
|
55
|
+
- ✅ 当前分支(是否在 main/master)
|
|
56
|
+
- ✅ 代码检查(ESLint)
|
|
57
|
+
- ✅ 测试(如果有)
|
|
58
|
+
- ✅ 构建
|
|
59
|
+
|
|
60
|
+
## 📝 Commit 规范
|
|
61
|
+
|
|
62
|
+
为了自动生成正确的 CHANGELOG,请遵循以下 commit 规范:
|
|
63
|
+
|
|
64
|
+
### Commit 类型
|
|
65
|
+
|
|
66
|
+
- `feat`: 新功能
|
|
67
|
+
- `fix`: 修复 bug
|
|
68
|
+
- `docs`: 文档更新
|
|
69
|
+
- `style`: 代码格式(不影响代码运行)
|
|
70
|
+
- `refactor`: 重构
|
|
71
|
+
- `perf`: 性能优化
|
|
72
|
+
- `test`: 测试相关
|
|
73
|
+
- `chore`: 构建工具或辅助工具的变动
|
|
74
|
+
|
|
75
|
+
### Commit 格式
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
<type>(<scope>): <subject>
|
|
79
|
+
|
|
80
|
+
<body>
|
|
81
|
+
|
|
82
|
+
<footer>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 示例
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# 新功能
|
|
89
|
+
git commit -m "feat: 添加文件大小格式化函数"
|
|
90
|
+
git commit -m "feat(array): 添加数组去重方法"
|
|
91
|
+
|
|
92
|
+
# 修复 bug
|
|
93
|
+
git commit -m "fix: 修复日期格式化在 Safari 中的问题"
|
|
94
|
+
git commit -m "fix(http): 修复请求超时配置无效的问题"
|
|
95
|
+
|
|
96
|
+
# 破坏性更新(会触发 major 版本)
|
|
97
|
+
git commit -m "feat: 重构 API 接口
|
|
98
|
+
|
|
99
|
+
BREAKING CHANGE: 移除了旧的 formatDate 方法,请使用 formatTime 代替"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 🎯 版本号规则
|
|
103
|
+
|
|
104
|
+
遵循 [语义化版本](https://semver.org/lang/zh-CN/):
|
|
105
|
+
|
|
106
|
+
- **MAJOR(主版本号)**:不兼容的 API 修改
|
|
107
|
+
- **MINOR(次版本号)**:向下兼容的功能性新增
|
|
108
|
+
- **PATCH(修订号)**:向下兼容的问题修正
|
|
109
|
+
|
|
110
|
+
### 何时升级版本?
|
|
111
|
+
|
|
112
|
+
| 变更类型 | 版本类型 | 示例 |
|
|
113
|
+
|---------|---------|------|
|
|
114
|
+
| 修复 bug | patch | 1.0.8 -> 1.0.9 |
|
|
115
|
+
| 新增功能(向下兼容) | minor | 1.0.8 -> 1.1.0 |
|
|
116
|
+
| 破坏性更新 | major | 1.0.8 -> 2.0.0 |
|
|
117
|
+
| 测试版本 | beta | 1.0.8 -> 1.0.9-beta.0 |
|
|
118
|
+
|
|
119
|
+
## 🔧 手动发布(不推荐)
|
|
120
|
+
|
|
121
|
+
如果需要手动控制每一步:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 1. 运行构建
|
|
125
|
+
npm run build
|
|
126
|
+
|
|
127
|
+
# 2. 更新版本号和生成 CHANGELOG
|
|
128
|
+
npm run standard-version -- --release-as patch
|
|
129
|
+
|
|
130
|
+
# 3. 发布到 npm
|
|
131
|
+
npm publish
|
|
132
|
+
|
|
133
|
+
# 4. 推送到 Git
|
|
134
|
+
git push --follow-tags
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## 📦 发布到特定 registry
|
|
138
|
+
|
|
139
|
+
如果需要发布到私有 npm registry:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# 设置 registry
|
|
143
|
+
npm config set registry https://your-registry.com
|
|
144
|
+
|
|
145
|
+
# 或者在发布时指定
|
|
146
|
+
npm publish --registry https://your-registry.com
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 🔐 npm 认证
|
|
150
|
+
|
|
151
|
+
首次发布需要登录 npm:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
npm login
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
或者使用 token:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
npm config set //registry.npmjs.org/:_authToken YOUR_TOKEN
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## ⚠️ 注意事项
|
|
164
|
+
|
|
165
|
+
1. **确保在正确的分支**:通常应该在 `main` 或 `master` 分支发布
|
|
166
|
+
2. **确保代码已提交**:不要有未提交的更改
|
|
167
|
+
3. **确保测试通过**:运行 `npm test` 确保所有测试通过
|
|
168
|
+
4. **确保构建成功**:运行 `npm run build` 确保构建无错误
|
|
169
|
+
5. **检查 .npmignore**:确保不会发布不必要的文件
|
|
170
|
+
|
|
171
|
+
## 🔄 回滚版本
|
|
172
|
+
|
|
173
|
+
如果发布了错误的版本:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 1. 从 npm 撤回版本(24小时内)
|
|
177
|
+
npm unpublish jinbi-utils@1.0.9
|
|
178
|
+
|
|
179
|
+
# 2. 删除本地 tag
|
|
180
|
+
git tag -d v1.0.9
|
|
181
|
+
|
|
182
|
+
# 3. 删除远程 tag
|
|
183
|
+
git push origin :refs/tags/v1.0.9
|
|
184
|
+
|
|
185
|
+
# 4. 回退 commit
|
|
186
|
+
git reset --hard HEAD~1
|
|
187
|
+
git push -f origin main
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 📊 查看发布历史
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# 查看所有版本
|
|
194
|
+
npm view jinbi-utils versions
|
|
195
|
+
|
|
196
|
+
# 查看最新版本
|
|
197
|
+
npm view jinbi-utils version
|
|
198
|
+
|
|
199
|
+
# 查看 Git tags
|
|
200
|
+
git tag -l
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## 🆘 常见问题
|
|
204
|
+
|
|
205
|
+
### Q: 发布失败,提示 "You do not have permission to publish"
|
|
206
|
+
|
|
207
|
+
A: 检查是否已登录 npm,或者是否有发布权限:
|
|
208
|
+
```bash
|
|
209
|
+
npm whoami
|
|
210
|
+
npm owner ls jinbi-utils
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Q: 如何发布 beta 版本?
|
|
214
|
+
|
|
215
|
+
A: 使用 `npm run release:beta`,这会创建类似 `1.0.9-beta.0` 的版本
|
|
216
|
+
|
|
217
|
+
### Q: 如何跳过某个步骤?
|
|
218
|
+
|
|
219
|
+
A: 可以手动执行命令,例如只更新版本号不发布:
|
|
220
|
+
```bash
|
|
221
|
+
npm run build
|
|
222
|
+
standard-version --release-as patch
|
|
223
|
+
# 不执行 npm publish
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Q: CHANGELOG 没有正确生成?
|
|
227
|
+
|
|
228
|
+
A: 确保 commit 信息遵循规范,使用 `feat:`、`fix:` 等前缀
|
|
229
|
+
|
|
230
|
+
## 📚 相关资源
|
|
231
|
+
|
|
232
|
+
- [语义化版本规范](https://semver.org/lang/zh-CN/)
|
|
233
|
+
- [Conventional Commits](https://www.conventionalcommits.org/zh-hans/)
|
|
234
|
+
- [standard-version 文档](https://github.com/conventional-changelog/standard-version)
|
|
235
|
+
- [npm 发布文档](https://docs.npmjs.com/cli/v8/commands/npm-publish)
|
|
236
|
+
|
|
237
|
+
## 🎉 发布成功后
|
|
238
|
+
|
|
239
|
+
1. ✅ 检查 npm 上的版本:https://www.npmjs.com/package/jinbi-utils
|
|
240
|
+
2. ✅ 检查 CHANGELOG.md 是否正确生成
|
|
241
|
+
3. ✅ 通知团队成员更新依赖
|
|
242
|
+
4. ✅ 更新相关文档(如果需要)
|
|
243
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
|
|
3
|
+
"mainEntryPointFilePath": "./types/index.d.ts",
|
|
4
|
+
"bundledPackages": [ ],
|
|
5
|
+
"dtsRollup": {
|
|
6
|
+
"enabled": true,
|
|
7
|
+
"untrimmedFilePath": "./types/index.d.ts"
|
|
8
|
+
},
|
|
9
|
+
"docModel": {
|
|
10
|
+
"enabled": true
|
|
11
|
+
},
|
|
12
|
+
"apiReport": {
|
|
13
|
+
"enabled": true
|
|
14
|
+
}
|
|
15
|
+
}
|
package/jest.config.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
testEnvironment: 'jsdom',
|
|
3
|
+
testEnvironmentOptions: {
|
|
4
|
+
url: 'http://localhost'
|
|
5
|
+
},
|
|
6
|
+
preset: 'ts-jest',
|
|
7
|
+
rootDir: './',
|
|
8
|
+
collectCoverage: false,
|
|
9
|
+
transformIgnorePatterns: ["/node_modules/"],
|
|
10
|
+
moduleFileExtensions: ["js", "ts", "tsx"],
|
|
11
|
+
transform: {
|
|
12
|
+
'^.+\\.js$': 'babel-jest',
|
|
13
|
+
'.*\\.(ts)$': 'ts-jest',
|
|
14
|
+
},
|
|
15
|
+
}
|