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.
Files changed (83) hide show
  1. package/.babelrc +19 -0
  2. package/.cz-config.js +55 -0
  3. package/.dockerignore +3 -0
  4. package/.editorconfig +12 -0
  5. package/.eslintignore +8 -0
  6. package/.eslintrc.js +54 -0
  7. package/.versionrc.json +9 -0
  8. package/CHANGELOG.md +49 -49
  9. package/CHUNK_OPTIMIZER_USAGE.md +132 -0
  10. package/Dockerfile +3 -0
  11. package/QUICK_RELEASE.md +85 -0
  12. package/README.md +189 -189
  13. package/RELEASE_GUIDE.md +243 -0
  14. package/api-extractor.json +15 -0
  15. package/commitlint.config.js +3 -0
  16. package/jest.config.js +15 -0
  17. package/package.json +82 -109
  18. package/rollup.config.chunk-optimizer.js +32 -0
  19. package/rollup.config.js +73 -0
  20. package/src/array/index.ts +85 -0
  21. package/src/build/chunk-optimizer/ARCHITECTURE.md +347 -0
  22. package/src/build/chunk-optimizer/QUICK_START.md +370 -0
  23. package/src/build/chunk-optimizer/README.md +240 -0
  24. package/src/build/chunk-optimizer/core/chunk-generator.ts +166 -0
  25. package/src/build/chunk-optimizer/core/classifier.ts +148 -0
  26. package/src/build/chunk-optimizer/core/dependency-reader.ts +138 -0
  27. package/src/build/chunk-optimizer/examples/basic-usage.ts +234 -0
  28. package/src/build/chunk-optimizer/index.ts +166 -0
  29. package/src/build/chunk-optimizer/rules/common-rules.ts +131 -0
  30. package/src/build/chunk-optimizer/rules/framework-rules.ts +93 -0
  31. package/src/build/chunk-optimizer/rules/index.ts +27 -0
  32. package/src/build/chunk-optimizer/test.ts +94 -0
  33. package/src/build/chunk-optimizer/types.ts +128 -0
  34. package/src/color/index.ts +58 -0
  35. package/src/common/index.ts +353 -0
  36. package/src/constant/common.constant.ts +13 -0
  37. package/src/date/index.ts +143 -0
  38. package/src/dom/index.ts +198 -0
  39. package/src/file/index.ts +319 -0
  40. package/src/http/apiBuilder/README.md +648 -0
  41. package/src/http/apiBuilder/api-builder.ts +502 -0
  42. package/src/http/apiBuilder/example.ts +243 -0
  43. package/src/http/apiBuilder/index.ts +1 -0
  44. package/src/http/apiBuilder//345/277/253/351/200/237/345/217/202/350/200/203.md +199 -0
  45. package/src/http/http.ts +79 -0
  46. package/src/http/httpEnums.ts +61 -0
  47. package/src/iam/index.ts +46 -0
  48. package/src/index.ts +20 -0
  49. package/src/middleware/requestLogger.middware.ts +371 -0
  50. package/src/middleware/requestLoggerUnified.ts +371 -0
  51. package/src/number/index.ts +362 -0
  52. package/src/object/index.ts +54 -0
  53. package/src/print/index.ts +102 -0
  54. package/src/string/index.ts +189 -0
  55. package/src/utils/curl.ts +108 -0
  56. package/src/validate/index.ts +100 -0
  57. package/src/websocket/emitter.ts +39 -0
  58. package/src/websocket/index.ts +6 -0
  59. package/src/websocket/manager.ts +151 -0
  60. package/src/websocket/pinia-store.ts +91 -0
  61. package/src/websocket/service.ts +34 -0
  62. package/src/websocket/types.ts +45 -0
  63. package/test/common/index.test.ts +19 -0
  64. package/test/date/index.test.ts +107 -0
  65. package/test/file/index.test.ts +104 -0
  66. package/test/number/index.test.ts +108 -0
  67. package/test/object/index.test.ts +20 -0
  68. package/test/string/index.test.ts +82 -0
  69. package/tsconfig.json +39 -0
  70. package/typedoc.json +12 -0
  71. package/types/file/index.d.ts +7 -0
  72. package/types/index.d.ts +1 -0
  73. package/types/websocket/emitter.d.ts +16 -0
  74. package/types/websocket/index.d.ts +6 -0
  75. package/types/websocket/manager.d.ts +36 -0
  76. package/types/websocket/pinia-store.d.ts +25 -0
  77. package/types/websocket/service.d.ts +13 -0
  78. package/types/websocket/types.d.ts +34 -0
  79. package/dist/chunk-optimizer.cjs +0 -703
  80. package/dist/index.esm.js +0 -2791
  81. package/dist/index.esm.min.js +0 -15
  82. package/dist/index.umd.js +0 -2899
  83. 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
 
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ extends: ['@commitlint/config-conventional'],
3
+ };
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
+ }