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.
- 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/CHUNK_OPTIMIZER_USAGE.md +132 -0
- package/Dockerfile +3 -0
- package/QUICK_RELEASE.md +85 -0
- 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 +8 -35
- 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/.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
package/.editorconfig
ADDED
package/.eslintignore
ADDED
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
|
+
};
|
package/.versionrc.json
ADDED
|
@@ -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
package/QUICK_RELEASE.md
ADDED
|
@@ -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
|
+
|
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
|
+
}
|