jinbi-utils 1.0.19 → 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 (81) 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/CHUNK_OPTIMIZER_USAGE.md +132 -0
  9. package/Dockerfile +3 -0
  10. package/QUICK_RELEASE.md +85 -0
  11. package/RELEASE_GUIDE.md +243 -0
  12. package/api-extractor.json +15 -0
  13. package/commitlint.config.js +3 -0
  14. package/jest.config.js +15 -0
  15. package/package.json +8 -35
  16. package/rollup.config.chunk-optimizer.js +32 -0
  17. package/rollup.config.js +73 -0
  18. package/src/array/index.ts +85 -0
  19. package/src/build/chunk-optimizer/ARCHITECTURE.md +347 -0
  20. package/src/build/chunk-optimizer/QUICK_START.md +370 -0
  21. package/src/build/chunk-optimizer/README.md +240 -0
  22. package/src/build/chunk-optimizer/core/chunk-generator.ts +166 -0
  23. package/src/build/chunk-optimizer/core/classifier.ts +148 -0
  24. package/src/build/chunk-optimizer/core/dependency-reader.ts +138 -0
  25. package/src/build/chunk-optimizer/examples/basic-usage.ts +234 -0
  26. package/src/build/chunk-optimizer/index.ts +166 -0
  27. package/src/build/chunk-optimizer/rules/common-rules.ts +131 -0
  28. package/src/build/chunk-optimizer/rules/framework-rules.ts +93 -0
  29. package/src/build/chunk-optimizer/rules/index.ts +27 -0
  30. package/src/build/chunk-optimizer/test.ts +94 -0
  31. package/src/build/chunk-optimizer/types.ts +128 -0
  32. package/src/color/index.ts +58 -0
  33. package/src/common/index.ts +353 -0
  34. package/src/constant/common.constant.ts +13 -0
  35. package/src/date/index.ts +143 -0
  36. package/src/dom/index.ts +198 -0
  37. package/src/file/index.ts +319 -0
  38. package/src/http/apiBuilder/README.md +648 -0
  39. package/src/http/apiBuilder/api-builder.ts +502 -0
  40. package/src/http/apiBuilder/example.ts +243 -0
  41. package/src/http/apiBuilder/index.ts +1 -0
  42. package/src/http/apiBuilder//345/277/253/351/200/237/345/217/202/350/200/203.md +199 -0
  43. package/src/http/http.ts +79 -0
  44. package/src/http/httpEnums.ts +61 -0
  45. package/src/iam/index.ts +46 -0
  46. package/src/index.ts +20 -0
  47. package/src/middleware/requestLogger.middware.ts +371 -0
  48. package/src/middleware/requestLoggerUnified.ts +371 -0
  49. package/src/number/index.ts +362 -0
  50. package/src/object/index.ts +54 -0
  51. package/src/print/index.ts +102 -0
  52. package/src/string/index.ts +189 -0
  53. package/src/utils/curl.ts +108 -0
  54. package/src/validate/index.ts +100 -0
  55. package/src/websocket/emitter.ts +39 -0
  56. package/src/websocket/index.ts +6 -0
  57. package/src/websocket/manager.ts +151 -0
  58. package/src/websocket/pinia-store.ts +91 -0
  59. package/src/websocket/service.ts +34 -0
  60. package/src/websocket/types.ts +45 -0
  61. package/test/common/index.test.ts +19 -0
  62. package/test/date/index.test.ts +107 -0
  63. package/test/file/index.test.ts +104 -0
  64. package/test/number/index.test.ts +108 -0
  65. package/test/object/index.test.ts +20 -0
  66. package/test/string/index.test.ts +82 -0
  67. package/tsconfig.json +39 -0
  68. package/typedoc.json +12 -0
  69. package/types/file/index.d.ts +7 -0
  70. package/types/index.d.ts +1 -0
  71. package/types/websocket/emitter.d.ts +16 -0
  72. package/types/websocket/index.d.ts +6 -0
  73. package/types/websocket/manager.d.ts +36 -0
  74. package/types/websocket/pinia-store.d.ts +25 -0
  75. package/types/websocket/service.d.ts +13 -0
  76. package/types/websocket/types.d.ts +34 -0
  77. package/dist/chunk-optimizer.cjs +0 -703
  78. package/dist/index.esm.js +0 -2791
  79. package/dist/index.esm.min.js +0 -15
  80. package/dist/index.umd.js +0 -2899
  81. package/dist/index.umd.min.js +0 -16
package/.babelrc ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "presets": [
3
+ [
4
+ "@babel/preset-env",
5
+ {
6
+ "modules": false,
7
+ "targets": {
8
+ "node": "current"
9
+ }
10
+ }
11
+ ],
12
+ "@babel/preset-typescript"
13
+ ],
14
+ "env": {
15
+ "test": {
16
+ "plugins": ["@babel/plugin-transform-modules-commonjs"]
17
+ }
18
+ }
19
+ }
package/.cz-config.js ADDED
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+
5
+ types: [
6
+ {value: 'feat', name: 'feat: 新特性或功能'},
7
+ {value: 'fix', name: 'fix: 修复Bug'},
8
+ {value: 'docs', name: 'docs: 文档的变更'},
9
+ {value: 'style', name: 'style: 不影响代码运行的风格更改(空白、格式、缺少分号等)'},
10
+ {value: 'refactor', name: 'refactor: 代码重构, 注意和feat、fix区分'},
11
+ {value: 'perf', name: 'perf: 提高性能'},
12
+ {value: 'test', name: 'test: 添加测试'},
13
+ {value: 'chore', name: 'chore: 开发工具(构建、脚手架工具等)和库(如文档生成)的更改'},
14
+ {value: 'revert', name: 'revert: 代码回滚'},
15
+ {value: 'WIP', name: 'WIP: 进行中开发'}
16
+ ],
17
+
18
+ // list of Function Modules
19
+ scopes: [
20
+ {name: '模块1'},
21
+ {name: '模块2'},
22
+ ],
23
+
24
+ // it needs to match the value for field type. Eg.: 'fix'
25
+ /*
26
+ scopeOverrides: {
27
+ fix: [
28
+ {name: 'merge'},
29
+ {name: 'style'},
30
+ {name: 'e2eTest'},
31
+ {name: 'unitTest'}
32
+ ]
33
+ },
34
+ */
35
+ // override the messages, defaults are as follows
36
+ messages: {
37
+ type: '选择一种提交类型:',
38
+ scope: '选择一个scope (可选):',
39
+ // used if allowCustomScopes is true
40
+ customScope: 'Denote the SCOPE of this change:',
41
+ subject: '简短说明:\n',
42
+ body: '长说明,使用"|"换行(可选):\n',
43
+ breaking: '非兼容性说明 (可选):\n',
44
+ footer: '关联关闭的issue,例如:#31, #34(可选):\n',
45
+ confirmCommit: '确定提交说明?'
46
+ },
47
+
48
+
49
+ allowCustomScopes: true,
50
+ allowBreakingChanges: ['feat', 'fix'],
51
+
52
+ // limit subject length
53
+ subjectLimit: 100
54
+
55
+ };
package/.dockerignore ADDED
@@ -0,0 +1,3 @@
1
+ .git
2
+ node_modules
3
+ npm-debug.log
package/.editorconfig ADDED
@@ -0,0 +1,12 @@
1
+ # http://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ indent_style = space
6
+ indent_size = 2
7
+ charset = utf-8
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
10
+
11
+ [*.md]
12
+ trim_trailing_whitespace = false
package/.eslintignore ADDED
@@ -0,0 +1,8 @@
1
+ /.git
2
+ /.vscode
3
+ node_modules
4
+ dist
5
+ test
6
+ rollup.config.js
7
+ types
8
+ *
package/.eslintrc.js ADDED
@@ -0,0 +1,54 @@
1
+ module.exports = {
2
+ "env": {
3
+ "browser": true,
4
+ "commonjs": true,
5
+ "es6": true,
6
+ "node": true
7
+ },
8
+ "extends": [
9
+ "eslint:recommended",
10
+ "plugin:@typescript-eslint/recommended"
11
+ ],
12
+ "parser": "@typescript-eslint/parser",
13
+ "plugins": ["@typescript-eslint"],
14
+ "parserOptions": {
15
+ "ecmaVersion": 2015,
16
+ "sourceType": "module",
17
+ "project": "./tsconfig.json"
18
+ },
19
+ "rules": {
20
+ 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
21
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
22
+ 'prefer-promise-reject-errors': 'off', // 要求使用 Error 对象作为 Promise 拒绝的原因
23
+ 'linebreak-style': 'off', // 回车换行风格
24
+ 'no-trailing-spaces': 1, // 允许在空行、在注释块中使用空白符
25
+ 'import/prefer-default-export': 'off', //
26
+ 'object-curly-newline': 'off', // 不强制花括号内换行
27
+ 'import/named': 'off', // 停用 import/named 校验
28
+ 'no-underscore-dangle': 'off', // 禁止标识符中有悬空下划线
29
+ 'import/order': 'off',
30
+ 'prefer-object-spread': 1, // 禁止使用以对象字面量作为第一个参数的 Object.assign,优先使用对象扩展。
31
+ 'arrow-parens': [2, "as-needed", { "requireForBlockBody": true }], // 要求箭头函数的参数使用圆括号
32
+ "comma-dangle": ["error", "always-multiline"], // 要求或禁止使用拖尾逗号
33
+ "semi": 2, // 要求或禁止使用分号代替 ASI
34
+ "keyword-spacing": 2, // 强制关键字周围空格的一致性
35
+ "@typescript-eslint/explicit-function-return-type": "off",
36
+ "@typescript-eslint/interface-name-prefix": "off",
37
+ "@typescript-eslint/no-empty-function": "off",
38
+ "@typescript-eslint/no-inferrable-types": "off",
39
+ "@typescript-eslint/no-empty-interface": "off",
40
+ "@typescript-eslint/no-non-null-assertion": "off",
41
+ "@typescript-eslint/no-explicit-any": "off",
42
+ "@typescript-eslint/explicit-module-boundary-types": "off",
43
+ "@typescript-eslint/member-delimiter-style": ["error", {
44
+ "multiline": {
45
+ "delimiter": "semi",
46
+ "requireLast": true
47
+ },
48
+ "singleline": {
49
+ "delimiter": "semi",
50
+ "requireLast": true
51
+ }
52
+ }]
53
+ }
54
+ };
@@ -0,0 +1,9 @@
1
+ {
2
+ "types": [
3
+ { "type": "feat", "section": "✨ Features" },
4
+ { "type": "fix", "section": "🐞 Bug Fixes" },
5
+ { "type": "docs", "section": "📖 Documentation" },
6
+ { "type": "style", "section": "🎨 Style" }
7
+ ],
8
+ "releaseCommitMessageFormat": "chore(release): 发布版本 v{{currentTag}}"
9
+ }
@@ -0,0 +1,132 @@
1
+ # Chunk Optimizer 使用说明
2
+
3
+ ## 问题说明
4
+
5
+ `chunk-optimizer` 是一个**构建时工具**,它依赖 Node.js 内置模块(`fs` 和 `path`),只能在 Node.js 环境中运行(如 `vite.config.ts`)。
6
+
7
+ 从 v1.0.9 版本开始,`chunk-optimizer` 已从主入口文件中移除,以避免将 Node.js 模块打包到浏览器端的 bundle 中。
8
+
9
+ ## 正确的使用方式
10
+
11
+ ### 在消费项目中使用
12
+
13
+ **方式一:通过单独的导出路径(推荐)**
14
+
15
+ ```typescript
16
+ // vite.config.ts
17
+ import { defineConfig } from 'vite'
18
+ import { createChunkOptimizer } from 'jinbi-utils/chunk-optimizer'
19
+
20
+ const optimizer = createChunkOptimizer({
21
+ framework: 'vue',
22
+ debug: true
23
+ })
24
+
25
+ export default defineConfig({
26
+ build: {
27
+ rollupOptions: {
28
+ output: {
29
+ manualChunks: optimizer.generate()
30
+ }
31
+ }
32
+ }
33
+ })
34
+ ```
35
+
36
+ **方式二:直接从源码导入**
37
+
38
+ ```typescript
39
+ // vite.config.ts
40
+ import { defineConfig } from 'vite'
41
+ import { createChunkOptimizer } from 'jinbi-utils/src/build/chunk-optimizer'
42
+
43
+ // 使用方式同上
44
+ ```
45
+
46
+ ### 在浏览器代码中使用其他工具函数
47
+
48
+ 浏览器代码中可以正常导入其他工具函数,不会受到影响:
49
+
50
+ ```typescript
51
+ // 在 .vue 或 .ts 文件中
52
+ import { formatTime, formatPhone, isEmpty } from 'jinbi-utils'
53
+
54
+ // 正常使用
55
+ const time = formatTime(Date.now())
56
+ ```
57
+
58
+ ## 版本升级指南
59
+
60
+ 如果你的项目之前使用的是 v1.0.8 或更早版本,并且遇到了以下错误:
61
+
62
+ ```
63
+ error during build:
64
+ "resolve" is not exported by "__vite-browser-external"
65
+ ```
66
+
67
+ 请按照以下步骤升级:
68
+
69
+ ### 步骤 1: 更新包版本
70
+
71
+ ```bash
72
+ npm install jinbi-utils@latest
73
+ # 或
74
+ pnpm update jinbi-utils
75
+ ```
76
+
77
+ ### 步骤 2: 修改 vite.config.ts 中的导入
78
+
79
+ **修改前:**
80
+ ```typescript
81
+ import { createChunkOptimizer } from 'jinbi-utils'
82
+ ```
83
+
84
+ **修改后:**
85
+ ```typescript
86
+ import { createChunkOptimizer } from 'jinbi-utils/chunk-optimizer'
87
+ ```
88
+
89
+ ### 步骤 3: 重新构建
90
+
91
+ ```bash
92
+ npm run build
93
+ ```
94
+
95
+ ## 技术细节
96
+
97
+ ### 为什么要这样做?
98
+
99
+ 1. **chunk-optimizer 依赖 Node.js 模块**:它需要读取 `package.json` 文件来分析依赖
100
+ 2. **浏览器环境不支持 Node.js 模块**:`fs` 和 `path` 无法在浏览器中运行
101
+ 3. **Vite 的处理方式**:当浏览器代码导入包含 Node.js 模块的文件时,Vite 会尝试用 polyfill 替换,但这会导致错误
102
+
103
+ ### 解决方案的原理
104
+
105
+ 通过将 `chunk-optimizer` 从主入口移除,并提供单独的导出路径:
106
+
107
+ - **浏览器代码**导入 `jinbi-utils` 时,只会加载不包含 Node.js 模块的代码
108
+ - **构建配置**导入 `jinbi-utils/chunk-optimizer` 时,可以正常使用 Node.js 模块
109
+
110
+ ## 常见问题
111
+
112
+ ### Q: 我的项目没有使用 chunk-optimizer,也遇到了这个错误?
113
+
114
+ A: 如果你的项目代码中导入了 `jinbi-utils`,但没有使用 `chunk-optimizer`,升级到最新版本即可解决。
115
+
116
+ ### Q: 我可以在浏览器代码中使用 chunk-optimizer 吗?
117
+
118
+ A: 不可以。`chunk-optimizer` 是构建时工具,只能在 Node.js 环境(如 `vite.config.ts`)中使用。
119
+
120
+ ### Q: 升级后,其他工具函数还能正常使用吗?
121
+
122
+ A: 可以。其他所有工具函数(如 `formatTime`、`formatPhone` 等)都不受影响,可以在浏览器代码中正常使用。
123
+
124
+ ## 联系支持
125
+
126
+ 如果遇到问题,请提供以下信息:
127
+
128
+ 1. `jinbi-utils` 版本号
129
+ 2. 错误信息截图
130
+ 3. `vite.config.ts` 中的相关配置
131
+ 4. Node.js 和 npm/pnpm 版本
132
+
package/Dockerfile ADDED
@@ -0,0 +1,3 @@
1
+ FROM nginx
2
+
3
+ COPY docs /usr/share/nginx/html/
@@ -0,0 +1,85 @@
1
+ # 🚀 快速发布参考
2
+
3
+ ## 一键发布命令
4
+
5
+ ```bash
6
+ # 🔧 修复 bug(1.0.8 -> 1.0.9)
7
+ npm run release
8
+
9
+ # 或明确指定
10
+ npm run release:patch
11
+
12
+ # ✨ 新功能(1.0.8 -> 1.1.0)
13
+ npm run release:minor
14
+
15
+ # 💥 破坏性更新(1.0.8 -> 2.0.0)
16
+ npm run release:major
17
+
18
+ # 🧪 测试版本(1.0.8 -> 1.0.9-beta.0)
19
+ npm run release:beta
20
+ ```
21
+
22
+ ## 发布前准备
23
+
24
+ 1. **提交所有更改**
25
+ ```bash
26
+ git add .
27
+ git commit -m "feat: 添加新功能"
28
+ ```
29
+
30
+ 2. **确保在正确的分支**
31
+ ```bash
32
+ git checkout main
33
+ ```
34
+
35
+ 3. **拉取最新代码**
36
+ ```bash
37
+ git pull origin main
38
+ ```
39
+
40
+ ## Commit 规范速查
41
+
42
+ | 类型 | 说明 | 示例 |
43
+ |------|------|------|
44
+ | `feat` | 新功能 | `feat: 添加文件上传功能` |
45
+ | `fix` | 修复 bug | `fix: 修复日期格式化问题` |
46
+ | `docs` | 文档 | `docs: 更新 API 文档` |
47
+ | `style` | 格式 | `style: 格式化代码` |
48
+ | `refactor` | 重构 | `refactor: 重构用户模块` |
49
+ | `perf` | 性能 | `perf: 优化列表渲染` |
50
+ | `test` | 测试 | `test: 添加单元测试` |
51
+ | `chore` | 构建 | `chore: 更新依赖` |
52
+
53
+ ## 自动化流程
54
+
55
+ 运行 `npm run release` 会自动:
56
+
57
+ 1. ✅ 运行构建
58
+ 2. 📝 更新版本号
59
+ 3. 📄 生成 CHANGELOG
60
+ 4. 🏷️ 创建 Git Tag
61
+ 5. 💾 提交更改
62
+ 6. 📤 发布到 npm
63
+ 7. ⬆️ 推送到 Git
64
+
65
+ ## 常见问题
66
+
67
+ **Q: 如何撤销发布?**
68
+ ```bash
69
+ npm unpublish jinbi-utils@版本号
70
+ ```
71
+
72
+ **Q: 如何查看当前版本?**
73
+ ```bash
74
+ npm view jinbi-utils version
75
+ ```
76
+
77
+ **Q: 发布失败怎么办?**
78
+ - 检查是否已登录:`npm whoami`
79
+ - 检查网络连接
80
+ - 查看错误信息
81
+
82
+ ## 详细文档
83
+
84
+ 查看 [RELEASE_GUIDE.md](./RELEASE_GUIDE.md) 了解完整的发布流程。
85
+
@@ -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
+ }