@qingtian/qtcli 1.0.0 → 1.0.1

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/README.md CHANGED
@@ -1,193 +1,193 @@
1
- # QTCli
2
-
3
- QTCli 是一款基于 Node.js 的前端工程化底座,提供了完整的项目构建、开发和部署解决方案。
4
-
5
- ## 特性
6
-
7
- - 🚀 快速创建和初始化项目
8
- - 📦 内置 Webpack 构建配置
9
- - 🔥 支持 React + TypeScript 开发
10
- - 🎨 支持 Less、Sass、CSS Modules
11
- - 📱 支持移动端适配
12
- - 🔍 内置 ESLint、StyleLint 代码规范检查
13
- - 🛠 支持自定义配置和插件扩展
14
-
15
- ## 安装
16
-
17
- ```bash
18
- npm install -g qtcli
19
- ```
20
-
21
- ## 使用方法
22
-
23
- ### 查看帮助
24
-
25
- ```bash
26
- qtcli --help
27
- ```
28
-
29
- ### 初始化项目
30
-
31
- ```bash
32
- qtcli init [options]
33
- ```
34
-
35
- ### 开发模式
36
-
37
- ```bash
38
- qtcli dev [options]
39
- ```
40
-
41
- ### 构建项目
42
-
43
- ```bash
44
- qtcli build [options]
45
- ```
46
-
47
- ### 全局选项
48
-
49
- - `-V, --version`: 显示版本号
50
- - `-D, --debug`: 启用调试模式
51
- - `-h, --help`: 显示帮助信息
52
-
53
- ## 项目结构
54
-
55
- ```
56
- my-project/
57
- ├── src/ # 源代码目录
58
- ├── public/ # 静态资源目录
59
- ├── dist/ # 构建输出目录
60
- └── qt.conf.js # 项目配置文件
61
- ```
62
-
63
- ## 配置说明
64
-
65
- 在项目根目录创建 `qt.conf.js` 文件进行自定义配置:
66
-
67
- ```javascript
68
- export default {
69
- // 构建类型
70
- buildType: 'WEB',
71
-
72
- // 解决方案名称
73
- solutionName: 'my-project',
74
-
75
- // 构建模式
76
- buildMode: {
77
- development: 'DEVELOPMENT',
78
- production: 'PRODUCTION',
79
- test: 'TEST',
80
- analyze: 'ANALYZE'
81
- },
82
-
83
- // 项目配置
84
- config: {
85
- // HTML 注入配置
86
- htmlInject: {
87
- head: [
88
- // meta 标签
89
- {
90
- tag: 'meta',
91
- attrs: {
92
- charset: 'utf-8'
93
- }
94
- },
95
- {
96
- tag: 'meta',
97
- attrs: {
98
- name: 'viewport',
99
- content: 'width=device-width, initial-scale=1'
100
- }
101
- },
102
- // link 标签
103
- {
104
- tag: 'link',
105
- attrs: {
106
- rel: 'stylesheet',
107
- href: '/static/css/global.css'
108
- }
109
- }
110
- ],
111
- body: [
112
- // body 中的 script
113
- {
114
- tag: 'script',
115
- attrs: {
116
- src: '/static/js/init.js'
117
- }
118
- }
119
- ]
120
- },
121
-
122
- // JavaScript 代码片段注入配置
123
- jsInject: {
124
- head: [
125
- {
126
- code: `window.APP_CONFIG = {
127
- version: '1.0.0',
128
- env: '${process.env.NODE_ENV}',
129
- apiUrl: '${process.env.API_URL}'
130
- };`
131
- }
132
- ],
133
- body: [
134
- {
135
- code: `document.addEventListener('DOMContentLoaded', function() {
136
- console.log('DOM loaded');
137
- });`
138
- }
139
- ]
140
- },
141
-
142
- // 环境变量配置
143
- env: {
144
- development: {
145
- NODE_ENV: 'development',
146
- API_URL: 'http://dev-api.example.com'
147
- },
148
- production: {
149
- NODE_ENV: 'production',
150
- API_URL: 'http://api.example.com'
151
- }
152
- }
153
- },
154
-
155
- // webpack 配置
156
- webpackConfig: {
157
- // 开发服务器配置
158
- devServer: {
159
- port: 3000,
160
- host: 'localhost'
161
- },
162
- // 解析配置
163
- resolve: {
164
- alias: {
165
- '@components': './src/components',
166
- '@utils': './src/utils'
167
- }
168
- },
169
- // 模块规则
170
- module: {
171
- rules: []
172
- },
173
- // 插件配置
174
- plugins: []
175
- }
176
- }
177
- ```
178
-
179
- ## 开发环境要求
180
-
181
- - Node.js >= 14.0.0
182
- - npm >= 6.0.0
183
-
184
- ## 作者
185
-
186
- - yujie.guo - 初始作者
187
-
188
- ## 问题反馈
189
-
190
- 如果你遇到任何问题或有任何建议,请通过以下方式联系我们:
191
-
192
- - 提交 Issue: [GitHub Issues](https://gitee.com/fengrengame/qtnode/issues)
193
- - 邮件联系: 296963166@qq.com
1
+ # QTCli
2
+
3
+ QTCli 是一款基于 Node.js 的前端工程化底座,提供了完整的项目构建、开发和部署解决方案。
4
+
5
+ ## 特性
6
+
7
+ - 🚀 快速创建和初始化项目
8
+ - 📦 内置 Webpack 构建配置
9
+ - 🔥 支持 React + TypeScript 开发
10
+ - 🎨 支持 Less、Sass、CSS Modules
11
+ - 📱 支持移动端适配
12
+ - 🔍 内置 ESLint、StyleLint 代码规范检查
13
+ - 🛠 支持自定义配置和插件扩展
14
+
15
+ ## 安装
16
+
17
+ ```bash
18
+ npm install -g qtcli
19
+ ```
20
+
21
+ ## 使用方法
22
+
23
+ ### 查看帮助
24
+
25
+ ```bash
26
+ qtcli --help
27
+ ```
28
+
29
+ ### 初始化项目
30
+
31
+ ```bash
32
+ qtcli init [options]
33
+ ```
34
+
35
+ ### 开发模式
36
+
37
+ ```bash
38
+ qtcli dev [options]
39
+ ```
40
+
41
+ ### 构建项目
42
+
43
+ ```bash
44
+ qtcli build [options]
45
+ ```
46
+
47
+ ### 全局选项
48
+
49
+ - `-V, --version`: 显示版本号
50
+ - `-D, --debug`: 启用调试模式
51
+ - `-h, --help`: 显示帮助信息
52
+
53
+ ## 项目结构
54
+
55
+ ```
56
+ my-project/
57
+ ├── src/ # 源代码目录
58
+ ├── public/ # 静态资源目录
59
+ ├── dist/ # 构建输出目录
60
+ └── qt.conf.js # 项目配置文件
61
+ ```
62
+
63
+ ## 配置说明
64
+
65
+ 在项目根目录创建 `qt.conf.js` 文件进行自定义配置:
66
+
67
+ ```javascript
68
+ export default {
69
+ // 构建类型
70
+ buildType: 'WEB',
71
+
72
+ // 解决方案名称
73
+ solutionName: 'my-project',
74
+
75
+ // 构建模式
76
+ buildMode: {
77
+ development: 'DEVELOPMENT',
78
+ production: 'PRODUCTION',
79
+ test: 'TEST',
80
+ analyze: 'ANALYZE'
81
+ },
82
+
83
+ // 项目配置
84
+ config: {
85
+ // HTML 注入配置
86
+ htmlInject: {
87
+ head: [
88
+ // meta 标签
89
+ {
90
+ tag: 'meta',
91
+ attrs: {
92
+ charset: 'utf-8'
93
+ }
94
+ },
95
+ {
96
+ tag: 'meta',
97
+ attrs: {
98
+ name: 'viewport',
99
+ content: 'width=device-width, initial-scale=1'
100
+ }
101
+ },
102
+ // link 标签
103
+ {
104
+ tag: 'link',
105
+ attrs: {
106
+ rel: 'stylesheet',
107
+ href: '/static/css/global.css'
108
+ }
109
+ }
110
+ ],
111
+ body: [
112
+ // body 中的 script
113
+ {
114
+ tag: 'script',
115
+ attrs: {
116
+ src: '/static/js/init.js'
117
+ }
118
+ }
119
+ ]
120
+ },
121
+
122
+ // JavaScript 代码片段注入配置
123
+ jsInject: {
124
+ head: [
125
+ {
126
+ code: `window.APP_CONFIG = {
127
+ version: '1.0.0',
128
+ env: '${process.env.NODE_ENV}',
129
+ apiUrl: '${process.env.API_URL}'
130
+ };`
131
+ }
132
+ ],
133
+ body: [
134
+ {
135
+ code: `document.addEventListener('DOMContentLoaded', function() {
136
+ console.log('DOM loaded');
137
+ });`
138
+ }
139
+ ]
140
+ },
141
+
142
+ // 环境变量配置
143
+ env: {
144
+ development: {
145
+ NODE_ENV: 'development',
146
+ API_URL: 'http://dev-api.example.com'
147
+ },
148
+ production: {
149
+ NODE_ENV: 'production',
150
+ API_URL: 'http://api.example.com'
151
+ }
152
+ }
153
+ },
154
+
155
+ // webpack 配置
156
+ webpackConfig: {
157
+ // 开发服务器配置
158
+ devServer: {
159
+ port: 3000,
160
+ host: 'localhost'
161
+ },
162
+ // 解析配置
163
+ resolve: {
164
+ alias: {
165
+ '@components': './src/components',
166
+ '@utils': './src/utils'
167
+ }
168
+ },
169
+ // 模块规则
170
+ module: {
171
+ rules: []
172
+ },
173
+ // 插件配置
174
+ plugins: []
175
+ }
176
+ }
177
+ ```
178
+
179
+ ## 开发环境要求
180
+
181
+ - Node.js >= 14.0.0
182
+ - npm >= 6.0.0
183
+
184
+ ## 作者
185
+
186
+ - yujie.guo - 初始作者
187
+
188
+ ## 问题反馈
189
+
190
+ 如果你遇到任何问题或有任何建议,请通过以下方式联系我们:
191
+
192
+ - 提交 Issue: [GitHub Issues](https://gitee.com/fengrengame/qtnode/issues)
193
+ - 邮件联系: 296963166@qq.com
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qingtian/qtcli",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "QTCli是一款基于node的前端工程化底座",
5
5
  "homepage": "https://gitee.com/fengrengame/qtnode#readme",
6
6
  "bugs": {
@@ -77,7 +77,6 @@
77
77
  "@types/react": "18.0.12",
78
78
  "@types/react-dom": "18.0.5",
79
79
  "autoprefixer": "10.4.7",
80
- "babel-jest": "^27.4.2",
81
80
  "babel-loader": "^8.2.3",
82
81
  "babel-plugin-import": "1.13.8",
83
82
  "babel-plugin-named-asset-import": "^0.3.8",
@@ -113,9 +112,6 @@
113
112
  "husky": "8.0.3",
114
113
  "identity-obj-proxy": "^3.0.0",
115
114
  "inquirer": "8.0.0",
116
- "jest": "^27.4.3",
117
- "jest-resolve": "^27.4.2",
118
- "jest-watch-typeahead": "^1.0.0",
119
115
  "less": "4.1.3",
120
116
  "less-loader": "11.0.0",
121
117
  "lint-staged": "15.5.1",
@@ -162,10 +158,11 @@
162
158
  "webpack-manifest-plugin": "^4.0.2",
163
159
  "webpack-merge": "5.8.0",
164
160
  "workbox-webpack-plugin": "^6.4.1",
165
- "yamljs": "0.3.0"
161
+ "yamljs": "0.3.0",
162
+ "html-webpack-tags-plugin": "^3.0.0",
163
+ "@commitlint/cli": "^19.8.0"
166
164
  },
167
165
  "devDependencies": {
168
- "@commitlint/cli": "^19.8.0",
169
166
  "@types/autoprefixer": "10.2.0",
170
167
  "@types/cli-progress": "3.11.5",
171
168
  "@types/colors": "1.2.1",
@@ -194,16 +191,10 @@
194
191
  "@types/webpack-dev-server": "4.7.2",
195
192
  "@types/webpack-merge": "5.0.0",
196
193
  "@types/yamljs": "0.2.34",
197
- "commitlint-config-ali": "^1.1.0",
198
- "eslint": "^8.56.0",
199
- "eslint-config-ali": "^15.1.0",
200
- "eslint-config-prettier": "^9.1.0",
201
- "eslint-plugin-prettier": "^5.3.1",
202
- "html-webpack-tags-plugin": "^3.0.0",
203
- "husky": "^8.0.3",
204
- "lint-staged": "^15.5.1",
205
- "prettier": "^3.5.3",
206
- "prettier-config-ali": "^1.3.4"
194
+ "babel-jest": "^27.4.2",
195
+ "jest": "^27.4.3",
196
+ "jest-resolve": "^27.4.2",
197
+ "jest-watch-typeahead": "^1.0.0"
207
198
  },
208
199
  "email": "296963166@qq.com"
209
200
  }
package/dist/qt.conf.js CHANGED
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
2
+ module.exports = {
4
3
  buildType: 'WEB',
5
4
  solutionName: 'qtnode',
6
5
  buildMode: {
@@ -55,16 +54,14 @@ exports.default = {
55
54
  },
56
55
  // JavaScript 代码片段注入配置
57
56
  jsInject: {
58
- head: [
59
- {
57
+ head: [{
60
58
  code: "window.APP_CONFIG = {\n version: '1.0.0',\n env: '".concat(process.env.NODE_ENV, "',\n apiUrl: '").concat(process.env.API_URL, "'\n };"),
61
59
  },
62
60
  {
63
61
  code: "window.initGlobalConfig = function() {\n console.log('Global config initialized');\n };",
64
62
  },
65
63
  ],
66
- body: [
67
- {
64
+ body: [{
68
65
  code: "document.addEventListener('DOMContentLoaded', function() {\n console.log('DOM loaded');\n window.initGlobalConfig();\n });",
69
66
  },
70
67
  {
@@ -86,7 +83,9 @@ exports.default = {
86
83
  },
87
84
  // webpack 配置
88
85
  webpackConfig: {
89
- devServer: {},
86
+ devServer: {
87
+ port: 3001,
88
+ },
90
89
  resolve: {
91
90
  alias: {
92
91
  '@components': './src/components',
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.deepMerge = void 0;
24
+ /**
25
+ * 深度合并对象
26
+ * @param target 目标对象
27
+ * @param source 源对象
28
+ * @returns 合并后的对象
29
+ */
30
+ function deepMerge(target, source) {
31
+ var result = __assign({}, target);
32
+ for (var key in source) {
33
+ var sourceValue = source[key];
34
+ var targetValue = target[key];
35
+ if (sourceValue !== null && typeof sourceValue === 'object' && targetValue !== null && typeof targetValue === 'object') {
36
+ // 如果是数组,直接合并
37
+ if (Array.isArray(sourceValue)) {
38
+ result[key] = __spreadArray(__spreadArray([], targetValue, true), sourceValue, true);
39
+ }
40
+ else {
41
+ // 递归合并对象
42
+ result[key] = deepMerge(targetValue, sourceValue);
43
+ }
44
+ }
45
+ else if (sourceValue !== undefined) {
46
+ // 如果源对象的值不是 undefined,则使用源对象的值
47
+ result[key] = sourceValue;
48
+ }
49
+ }
50
+ return result;
51
+ }
52
+ exports.deepMerge = deepMerge;
@@ -114,11 +114,18 @@ var formatESLintMessages = function (results, severity) {
114
114
  var severityText = m.severity === 2 ? colors_1.default.red('error') : colors_1.default.yellow('warning');
115
115
  var location = colors_1.default.gray.underline("".concat(m.line, ":").concat(m.column));
116
116
  var ruleId = m.ruleId ? colors_1.default.cyan(" ".concat(m.ruleId)) : '';
117
- return "".concat(severityText, " in ").concat(colors_1.default.white(r.filePath), "\n").concat(colors_1.default.gray(m.message)).concat(ruleId, " ").concat(location);
117
+ return " ".concat(severityText, " ").concat(colors_1.default.gray(m.message)).concat(ruleId, " ").concat(location);
118
118
  });
119
- return messages.join('\n');
119
+ return "".concat(colors_1.default.white(r.filePath), "\n").concat(messages.join('\n'));
120
120
  })
121
- .join('\n');
121
+ .join('\n\n');
122
+ };
123
+ var getStatus = function (errorCount, warningCount) {
124
+ if (errorCount > 0)
125
+ return 'error';
126
+ if (warningCount > 0)
127
+ return 'warning';
128
+ return 'success';
122
129
  };
123
130
  exports.formatOutput = {
124
131
  build: function (output) { return __awaiter(void 0, void 0, void 0, function () {
@@ -175,12 +182,11 @@ exports.formatOutput = {
175
182
  });
176
183
  }); },
177
184
  eslint: function (output) { return __awaiter(void 0, void 0, void 0, function () {
178
- var nodes, errorMessages, warningMessages, errorText, warningText, timeText, status;
185
+ var nodes, errorMessages, warningMessages, errorText, warningText, timeText;
179
186
  return __generator(this, function (_a) {
180
187
  nodes = [];
181
188
  errorMessages = output.errorCount > 0
182
- ? formatESLintMessages(output.results, 2) ||
183
- "".concat(colors_1.default.red(String(output.errorCount)), " \u4E2A\u9519\u8BEF")
189
+ ? formatESLintMessages(output.results, 2)
184
190
  : '无错误';
185
191
  nodes.push((0, exports.formatNode)({
186
192
  type: 'process',
@@ -189,8 +195,7 @@ exports.formatOutput = {
189
195
  status: output.errorCount > 0 ? 'error' : 'success',
190
196
  }));
191
197
  warningMessages = output.warningCount > 0
192
- ? formatESLintMessages(output.results, 1) ||
193
- "".concat(colors_1.default.yellow(String(output.warningCount)), " \u4E2A\u8B66\u544A")
198
+ ? formatESLintMessages(output.results, 1)
194
199
  : '无警告';
195
200
  nodes.push((0, exports.formatNode)({
196
201
  type: 'process',
@@ -201,18 +206,11 @@ exports.formatOutput = {
201
206
  errorText = colors_1.default.red("".concat(output.errorCount, " \u9519\u8BEF"));
202
207
  warningText = colors_1.default.yellow("".concat(output.warningCount, " \u8B66\u544A"));
203
208
  timeText = output.time ? colors_1.default.green("\u8017\u65F6 ".concat((output.time / 1000).toFixed(2), "s")) : '';
204
- status = 'success';
205
- if (output.errorCount > 0) {
206
- status = 'error';
207
- }
208
- else if (output.warningCount > 0) {
209
- status = 'warning';
210
- }
211
209
  nodes.push((0, exports.formatNode)({
212
210
  type: 'process',
213
211
  title: 'ESLint检查完成',
214
212
  content: "".concat(errorText, " ").concat(warningText, " ").concat(timeText),
215
- status: status,
213
+ status: getStatus(output.errorCount, output.warningCount),
216
214
  }));
217
215
  return [2 /*return*/, nodes.join('\n')];
218
216
  });
@@ -29,12 +29,12 @@ var formatOutput_1 = require("../utils/formatOutput");
29
29
  var logStart = function () {
30
30
  console.log((0, formatOutput_1.formatNode)({
31
31
  type: 'start',
32
- title: 'QTCli 工程底座',
32
+ title: "QTCli \u5DE5\u7A0B\u5E95\u5EA7 ".concat(pkg.version),
33
33
  }));
34
34
  console.log((0, formatOutput_1.formatNode)({
35
- type: 'process3',
36
- title: '版本',
37
- content: pkg.version,
35
+ type: 'process',
36
+ title: '环境信息',
37
+ content: "\u5F53\u524D\u73AF\u5883: ".concat(process.env.NODE_ENV || 'development', "\nNode\u7248\u672C: ").concat(process.version),
38
38
  }));
39
39
  };
40
40
  exports.logStart = logStart;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var teamData = [
4
+ {
5
+ projectName: 'AC项目',
6
+ teams: [
7
+ {
8
+ teamName: '古墓丽影战队',
9
+ members: [
10
+ { name: '刘茜苑', type: '战队队员' },
11
+ { name: '黄孝文', type: '战队队员' },
12
+ { name: '张大千', type: '战队队员' },
13
+ { name: '李智', type: '战队队长' },
14
+ { name: '辛义海', type: '战队队员' },
15
+ { name: '郑全超', type: '战队队员' },
16
+ ],
17
+ },
18
+ {
19
+ teamName: '多维巡航者',
20
+ members: [
21
+ { name: '苗凯', type: '战队队员' },
22
+ { name: '王祥祥', type: '战队队员' },
23
+ { name: '宋文婷', type: '战队队员' },
24
+ { name: '刘帅鑫', type: '战队队员' },
25
+ { name: '任晓青', type: '战队队员' },
26
+ { name: '孔令贵', type: '战队队员' },
27
+ { name: '赖楠楠', type: '战队队员' },
28
+ { name: '赵文龙', type: '战队队员' },
29
+ { name: '李冠华', type: '战队队员' },
30
+ { name: '范亨举', type: '战队队长' },
31
+ { name: '吴如军', type: '战队队员' },
32
+ { name: '王海阔', type: '战队队员' },
33
+ ],
34
+ },
35
+ {
36
+ teamName: '方块空间战队',
37
+ members: [
38
+ { name: '刘钰雪', type: '战队队长' },
39
+ { name: '谭鑫鑫', type: '战队队员' },
40
+ { name: '侯明江', type: '战队队员' },
41
+ ],
42
+ },
43
+ {
44
+ teamName: '三消数据战队',
45
+ members: [
46
+ { name: '王杰', type: '战队队员' },
47
+ { name: '李朋飞', type: '战队队员' },
48
+ { name: '吴永辉', type: '战队队员' },
49
+ ],
50
+ },
51
+ {
52
+ teamName: '神威战队',
53
+ members: [
54
+ { name: '张远波', type: '战队队员' },
55
+ { name: '衣光辉', type: '战队队长' },
56
+ { name: '刘军', type: '战队队员' },
57
+ { name: '房佳龙', type: '战队队员' },
58
+ { name: '王浩', type: '战队队员' },
59
+ { name: '缪呈祥', type: '战队队员' },
60
+ { name: '黄思灵', type: '战队队长' },
61
+ { name: '郭宇杰', type: 'CEO' },
62
+ ],
63
+ },
64
+ {
65
+ teamName: '数据猎鹰战队',
66
+ members: [
67
+ { name: '刘翀', type: '战队队员' },
68
+ ],
69
+ },
70
+ ],
71
+ members: [
72
+ { name: '袁旭道', type: 'Buddy' },
73
+ { name: '李强强', type: '军团指挥官' },
74
+ { name: '石军强', type: '军团指挥官' },
75
+ ],
76
+ },
77
+ {
78
+ projectName: 'EM项目',
79
+ teams: [
80
+ {
81
+ teamName: '财富开拓者战队',
82
+ members: [
83
+ { name: '邓照', type: '战队队员' },
84
+ { name: '马金涛', type: '战队队员' },
85
+ { name: '陈守肖', type: '战队队员' },
86
+ { name: '崔福权', type: '战队队员' },
87
+ { name: '孙若尘', type: '战队长' },
88
+ { name: '李阳阳', type: '战队队员' },
89
+ ],
90
+ },
91
+ {
92
+ teamName: '共鸣之声战队',
93
+ members: [
94
+ { name: '黄海', type: '战队队员' },
95
+ { name: '周浩', type: '战队队员' },
96
+ { name: '王琛', type: '战队队员' },
97
+ { name: '强敏', type: '战队队员' },
98
+ { name: '陈璇', type: '战队队长' },
99
+ { name: '钟勇飞', type: '战队队员' },
100
+ ],
101
+ },
102
+ {
103
+ teamName: '烈焰之笔战队',
104
+ members: [
105
+ { name: '刘腾飞', type: '战队队员' },
106
+ { name: '颜丙峰', type: '战队队员' },
107
+ { name: '张超', type: '战队队员' },
108
+ { name: '姜兆珍', type: '战队队员' },
109
+ { name: '兰喆', type: '战队队员' },
110
+ { name: '莫玉涛', type: '战队队员' },
111
+ { name: '王伟', type: '战队队长' },
112
+ { name: '唐杰', type: '战队队员' },
113
+ { name: '麻俊鹏', type: '战队队员' },
114
+ { name: '刘卜蔚', type: '战队队员' },
115
+ ],
116
+ },
117
+ {
118
+ teamName: '精算战鹰战队',
119
+ members: [
120
+ { name: '郭维祎', type: '战队队员' },
121
+ { name: '温绍琨', type: '战队队长' },
122
+ { name: '马天', type: '战队队员' },
123
+ { name: '孙峥嵘', type: '战队队员' },
124
+ { name: '郝翌', type: '战队队员' },
125
+ ],
126
+ },
127
+ {
128
+ teamName: '成长守护者战队',
129
+ members: [
130
+ { name: '单宝龙', type: '战队队员' },
131
+ { name: '邵鹏', type: '战队队员' },
132
+ { name: '竺文杰', type: '战队队长' },
133
+ { name: '丁浩', type: '战队队员' },
134
+ { name: '杨在茂', type: '战队队员' },
135
+ ],
136
+ },
137
+ {
138
+ teamName: '节日猎手战队',
139
+ members: [
140
+ { name: '李子昂', type: '战队队员' },
141
+ { name: '卢中原', type: '战队队员' },
142
+ { name: '王圆凯', type: '战队队员' },
143
+ { name: '赵文煊', type: '战队队长' },
144
+ { name: '王鹏', type: '战队队员' },
145
+ { name: '姚彦铭', type: '战队队员' },
146
+ { name: '丁逸俊', type: '战队队员' },
147
+ { name: '严学致', type: '战队队员' },
148
+ ],
149
+ },
150
+ {
151
+ teamName: '竞技之刃战队',
152
+ members: [
153
+ { name: '王顺祥', type: '战队队员' },
154
+ { name: '冯钦伟', type: '战队队员' },
155
+ { name: '崔永祺', type: '战队队员' },
156
+ { name: '李文超', type: '战队队长' },
157
+ { name: '解志辉', type: '战队队员' },
158
+ { name: '张胜杰', type: '战队队员' },
159
+ ],
160
+ },
161
+ {
162
+ teamName: '模块构造者战队',
163
+ members: [
164
+ { name: '石军强', type: '军团指挥官' },
165
+ ],
166
+ },
167
+ {
168
+ teamName: '创世者战队',
169
+ members: [
170
+ { name: '吴桥', type: '战队员' },
171
+ ],
172
+ },
173
+ ],
174
+ members: [
175
+ { name: '石军强', type: '军团指挥官' },
176
+ ],
177
+ },
178
+ ];
179
+ exports.default = teamData;
@@ -22,10 +22,11 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
22
22
  var __importDefault = (this && this.__importDefault) || function (mod) {
23
23
  return (mod && mod.__esModule) ? mod : { "default": mod };
24
24
  };
25
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
25
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
26
26
  Object.defineProperty(exports, "__esModule", { value: true });
27
27
  var loader_1 = require("../../processEnv/loader");
28
28
  var manager_1 = require("../../processEnv/manager");
29
+ var deepMerge_1 = require("../../utils/deepMerge");
29
30
  var DonePlugin_1 = __importDefault(require("../plugins/DonePlugin"));
30
31
  var FileListPlugin_1 = __importDefault(require("../plugins/FileListPlugin"));
31
32
  var InjectScriptPlugin_1 = __importDefault(require("../plugins/InjectScriptPlugin"));
@@ -405,7 +406,7 @@ var config = {
405
406
  ], false).filter(Boolean),
406
407
  resolve: {
407
408
  modules: ['node_modules', path.resolve(__dirname, '../../../node_modules')],
408
- extensions: ['.jsx', '.js', '.tsx', '.ts', '.less', '.scss'],
409
+ extensions: ['.tsx', '.ts', '.jsx', '.js', '.less', '.scss'],
409
410
  alias: __assign({ '@': path.resolve(process.cwd(), './src'), react: path.resolve(process.cwd(), './node_modules/react') }, (_p = (_o = qtConfig === null || qtConfig === void 0 ? void 0 : qtConfig.webpackConfig) === null || _o === void 0 ? void 0 : _o.resolve) === null || _p === void 0 ? void 0 : _p.alias),
410
411
  },
411
412
  resolveLoader: {
@@ -413,7 +414,5 @@ var config = {
413
414
  },
414
415
  };
415
416
  // 合并 webpack 配置
416
- var finalConfig = __assign(__assign(__assign({}, config), (qtConfig.webpackConfig || {})), {
417
- // 确保某些配置不被覆盖
418
- entry: config.entry, output: __assign(__assign({}, config.output), (((_q = qtConfig.webpackConfig) === null || _q === void 0 ? void 0 : _q.output) || {})), module: __assign(__assign({}, config.module), { rules: __spreadArray(__spreadArray([], (((_r = config.module) === null || _r === void 0 ? void 0 : _r.rules) || []), true), (((_t = (_s = qtConfig.webpackConfig) === null || _s === void 0 ? void 0 : _s.module) === null || _t === void 0 ? void 0 : _t.rules) || []), true) }), plugins: __spreadArray(__spreadArray([], (config.plugins || []), true), (((_u = qtConfig.webpackConfig) === null || _u === void 0 ? void 0 : _u.plugins) || []), true) });
417
+ var finalConfig = (0, deepMerge_1.deepMerge)(config, qtConfig.webpackConfig || {});
419
418
  exports.default = finalConfig;
package/package.json CHANGED
@@ -1,209 +1,203 @@
1
- {
2
- "name": "@qingtian/qtcli",
3
- "version": "1.0.0",
4
- "description": "QTCli是一款基于node的前端工程化底座",
5
- "homepage": "https://gitee.com/fengrengame/qtnode#readme",
6
- "bugs": {
7
- "url": "https://gitee.com/fengrengame/qtnode/issues"
8
- },
9
- "repository": {
10
- "type": "git",
11
- "url": "git+https://gitee.com/fengrengame/qtnode.git"
12
- },
13
- "license": "ISC",
14
- "author": "yujie.guo",
15
- "type": "commonjs",
16
- "main": "./dist/bin/cli.js",
17
- "bin": {
18
- "qtcli": "./dist/bin/cli.js"
19
- },
20
- "files": [
21
- "dist",
22
- "README.md"
23
- ],
24
- "keywords": [
25
- "cli",
26
- "frontend",
27
- "build-tool",
28
- "webpack",
29
- "react"
30
- ],
31
- "publishConfig": {
32
- "registry": "https://registry.npmjs.org/"
33
- },
34
- "scripts": {
35
- "build": "rimraf ./dist && tsc -p .",
36
- "clean": "rimraf ./dist",
37
- "f2elint-fix": "f2elint fix",
38
- "f2elint-scan": "f2elint scan",
39
- "lint": "eslint .",
40
- "lint:fix": "eslint --fix .",
41
- "prepare": "husky install",
42
- "prepublishOnly": "npm run build",
43
- "start": "node --max-old-space-size=8192 ./node_modules/.bin/ts-node ./bin/cli.ts"
44
- },
45
- "commitlint": {
46
- "extends": [
47
- "ali"
48
- ]
49
- },
50
- "lint-staged": {
51
- "*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}": "eslint --fix",
52
- "*.{css,less,scss}": "stylelint --fix",
53
- "*.{cjs,css,cts,html,js,json,jsx,less,md,mjs,mts,scss,ts,tsx,vue,yaml,yml}": "prettier --write"
54
- },
55
- "eslintConfig": {
56
- "extends": [
57
- "ali/typescript/node"
58
- ]
59
- },
60
- "stylelint": {},
61
- "dependencies": {
62
- "@babel/cli": "7.24.6",
63
- "@babel/core": "^7.16.0",
64
- "@babel/plugin-proposal-class-properties": "7.18.6",
65
- "@babel/plugin-proposal-decorators": "7.18.2",
66
- "@babel/plugin-proposal-object-rest-spread": "7.20.7",
67
- "@babel/plugin-syntax-flow": "7.24.6",
68
- "@babel/plugin-transform-block-scoping": "7.27.0",
69
- "@babel/plugin-transform-flow-strip-types": "7.24.6",
70
- "@babel/plugin-transform-runtime": "7.18.5",
71
- "@babel/plugin-transform-typescript": "7.24.6",
72
- "@babel/preset-env": "7.18.2",
73
- "@babel/preset-react": "7.17.12",
74
- "@babel/preset-typescript": "7.17.12",
75
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
76
- "@svgr/webpack": "^5.5.0",
77
- "@types/react": "18.0.12",
78
- "@types/react-dom": "18.0.5",
79
- "autoprefixer": "10.4.7",
80
- "babel-jest": "^27.4.2",
81
- "babel-loader": "^8.2.3",
82
- "babel-plugin-import": "1.13.8",
83
- "babel-plugin-named-asset-import": "^0.3.8",
84
- "babel-preset-react-app": "^10.0.1",
85
- "bfj": "^7.0.2",
86
- "browserslist": "^4.18.1",
87
- "camelcase": "^6.2.1",
88
- "case-sensitive-paths-webpack-plugin": "^2.4.0",
89
- "cli-progress": "3.12.0",
90
- "colors": "1.4.0",
91
- "commander": "12.1.0",
92
- "commitlint-config-ali": "1.1.0",
93
- "compressing": "1.10.0",
94
- "compression-webpack-plugin": "10.0.0",
95
- "copy-webpack-plugin": "11.0.0",
96
- "core-js": "3.23.0",
97
- "cross-env": "7.0.3",
98
- "css-loader": "^6.5.1",
99
- "css-minimizer-webpack-plugin": "^3.2.0",
100
- "dotenv": "^10.0.0",
101
- "dotenv-expand": "^5.1.0",
102
- "eslint": "^8.3.0",
103
- "eslint-config-ali": "15.1.0",
104
- "eslint-config-prettier": "9.1.0",
105
- "eslint-config-react-app": "^7.0.1",
106
- "eslint-plugin-prettier": "5.2.6",
107
- "eslint-webpack-plugin": "^3.1.1",
108
- "extract-zip": "2.0.1",
109
- "file-loader": "^6.2.0",
110
- "fs-extra": "^10.0.0",
111
- "glob-all": "3.3.1",
112
- "html-webpack-plugin": "^5.5.0",
113
- "husky": "8.0.3",
114
- "identity-obj-proxy": "^3.0.0",
115
- "inquirer": "8.0.0",
116
- "jest": "^27.4.3",
117
- "jest-resolve": "^27.4.2",
118
- "jest-watch-typeahead": "^1.0.0",
119
- "less": "4.1.3",
120
- "less-loader": "11.0.0",
121
- "lint-staged": "15.5.1",
122
- "mini-css-extract-plugin": "^2.7.6",
123
- "postcss": "^8.4.38",
124
- "postcss-flexbugs-fixes": "^5.0.2",
125
- "postcss-loader": "^6.2.1",
126
- "postcss-normalize": "^10.0.1",
127
- "postcss-preset-env": "^7.0.1",
128
- "prettier": "3.5.3",
129
- "prettier-config-ali": "1.3.2",
130
- "progress": "2.0.3",
131
- "progress-bar-webpack-plugin": "2.1.0",
132
- "prompts": "^2.4.2",
133
- "purgecss-webpack-plugin": "4.1.3",
134
- "react": "^18.2.0",
135
- "react-app-polyfill": "^3.0.0",
136
- "react-dev-utils": "^12.0.1",
137
- "react-dom": "^18.2.0",
138
- "react-refresh": "^0.11.0",
139
- "resolve": "^1.20.0",
140
- "resolve-url-loader": "^4.0.0",
141
- "rimraf": "5.0.7",
142
- "sass": "1.70.0",
143
- "sass-loader": "^12.3.0",
144
- "semver": "^7.3.5",
145
- "source-map-loader": "^3.0.0",
146
- "speed-measure-webpack-plugin": "1.5.0",
147
- "style-loader": "^3.3.1",
148
- "stylelint": "16.19.1",
149
- "stylelint-config-ali": "2.1.2",
150
- "stylelint-prettier": "5.0.3",
151
- "tailwindcss": "^3.0.2",
152
- "terser-webpack-plugin": "^5.2.5",
153
- "thread-loader": "3.0.4",
154
- "ts-node": "10.9.2",
155
- "typescript": "4.7.3",
156
- "unzip": "0.1.11",
157
- "url-loader": "4.1.1",
158
- "webpack": "^5.64.4",
159
- "webpack-bundle-analyzer": "4.5.0",
160
- "webpack-cli": "4.9.2",
161
- "webpack-dev-server": "^4.6.0",
162
- "webpack-manifest-plugin": "^4.0.2",
163
- "webpack-merge": "5.8.0",
164
- "workbox-webpack-plugin": "^6.4.1",
165
- "yamljs": "0.3.0"
166
- },
167
- "devDependencies": {
168
- "@commitlint/cli": "^19.8.0",
169
- "@types/autoprefixer": "10.2.0",
170
- "@types/cli-progress": "3.11.5",
171
- "@types/colors": "1.2.1",
172
- "@types/commander": "2.12.2",
173
- "@types/compression-webpack-plugin": "9.1.1",
174
- "@types/copy-webpack-plugin": "10.1.0",
175
- "@types/css-minimizer-webpack-plugin": "3.2.1",
176
- "@types/extract-zip": "2.0.1",
177
- "@types/glob": "^8.1.0",
178
- "@types/html-webpack-plugin": "3.2.9",
179
- "@types/inquirer": "9.0.7",
180
- "@types/less": "3.0.6",
181
- "@types/mini-css-extract-plugin": "2.5.1",
182
- "@types/node": "14.18.47",
183
- "@types/progress": "2.0.7",
184
- "@types/progress-bar-webpack-plugin": "2.1.5",
185
- "@types/react": "19.1.2",
186
- "@types/react-dom": "19.1.2",
187
- "@types/react-refresh": "0.14.6",
188
- "@types/rimraf": "4.0.5",
189
- "@types/speed-measure-webpack-plugin": "1.3.6",
190
- "@types/typescript": "2.0.0",
191
- "@types/unzip": "0.1.4",
192
- "@types/webpack": "5.28.5",
193
- "@types/webpack-bundle-analyzer": "4.7.0",
194
- "@types/webpack-dev-server": "4.7.2",
195
- "@types/webpack-merge": "5.0.0",
196
- "@types/yamljs": "0.2.34",
197
- "commitlint-config-ali": "^1.1.0",
198
- "eslint": "^8.56.0",
199
- "eslint-config-ali": "^15.1.0",
200
- "eslint-config-prettier": "^9.1.0",
201
- "eslint-plugin-prettier": "^5.3.1",
202
- "html-webpack-tags-plugin": "^3.0.0",
203
- "husky": "^8.0.3",
204
- "lint-staged": "^15.5.1",
205
- "prettier": "^3.5.3",
206
- "prettier-config-ali": "^1.3.4"
207
- },
208
- "email": "296963166@qq.com"
209
- }
1
+ {
2
+ "name": "@qingtian/qtcli",
3
+ "version": "1.0.1",
4
+ "description": "QTCli是一款基于node的前端工程化底座",
5
+ "homepage": "https://gitee.com/fengrengame/qtnode#readme",
6
+ "bugs": {
7
+ "url": "https://gitee.com/fengrengame/qtnode/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://gitee.com/fengrengame/qtnode.git"
12
+ },
13
+ "license": "ISC",
14
+ "author": "yujie.guo",
15
+ "type": "commonjs",
16
+ "main": "./dist/bin/cli.js",
17
+ "bin": {
18
+ "qtcli": "./dist/bin/cli.js"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md"
23
+ ],
24
+ "keywords": [
25
+ "cli",
26
+ "frontend",
27
+ "build-tool",
28
+ "webpack",
29
+ "react"
30
+ ],
31
+ "publishConfig": {
32
+ "registry": "https://registry.npmjs.org/"
33
+ },
34
+ "scripts": {
35
+ "build": "rimraf ./dist && tsc -p .",
36
+ "clean": "rimraf ./dist",
37
+ "f2elint-fix": "f2elint fix",
38
+ "f2elint-scan": "f2elint scan",
39
+ "lint": "eslint .",
40
+ "lint:fix": "eslint --fix .",
41
+ "prepare": "husky install",
42
+ "prepublishOnly": "npm run build",
43
+ "start": "node --max-old-space-size=8192 ./node_modules/.bin/ts-node ./bin/cli.ts"
44
+ },
45
+ "commitlint": {
46
+ "extends": [
47
+ "ali"
48
+ ]
49
+ },
50
+ "lint-staged": {
51
+ "*.{cjs,cts,js,jsx,mjs,mts,ts,tsx,vue}": "eslint --fix",
52
+ "*.{css,less,scss}": "stylelint --fix",
53
+ "*.{cjs,css,cts,html,js,json,jsx,less,md,mjs,mts,scss,ts,tsx,vue,yaml,yml}": "prettier --write"
54
+ },
55
+ "eslintConfig": {
56
+ "extends": [
57
+ "ali/typescript/node"
58
+ ]
59
+ },
60
+ "stylelint": {},
61
+ "dependencies": {
62
+ "@babel/cli": "7.24.6",
63
+ "@babel/core": "^7.16.0",
64
+ "@babel/plugin-proposal-class-properties": "7.18.6",
65
+ "@babel/plugin-proposal-decorators": "7.18.2",
66
+ "@babel/plugin-proposal-object-rest-spread": "7.20.7",
67
+ "@babel/plugin-syntax-flow": "7.24.6",
68
+ "@babel/plugin-transform-block-scoping": "7.27.0",
69
+ "@babel/plugin-transform-flow-strip-types": "7.24.6",
70
+ "@babel/plugin-transform-runtime": "7.18.5",
71
+ "@babel/plugin-transform-typescript": "7.24.6",
72
+ "@babel/preset-env": "7.18.2",
73
+ "@babel/preset-react": "7.17.12",
74
+ "@babel/preset-typescript": "7.17.12",
75
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
76
+ "@svgr/webpack": "^5.5.0",
77
+ "@types/react": "18.0.12",
78
+ "@types/react-dom": "18.0.5",
79
+ "autoprefixer": "10.4.7",
80
+ "babel-loader": "^8.2.3",
81
+ "babel-plugin-import": "1.13.8",
82
+ "babel-plugin-named-asset-import": "^0.3.8",
83
+ "babel-preset-react-app": "^10.0.1",
84
+ "bfj": "^7.0.2",
85
+ "browserslist": "^4.18.1",
86
+ "camelcase": "^6.2.1",
87
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
88
+ "cli-progress": "3.12.0",
89
+ "colors": "1.4.0",
90
+ "commander": "12.1.0",
91
+ "commitlint-config-ali": "1.1.0",
92
+ "compressing": "1.10.0",
93
+ "compression-webpack-plugin": "10.0.0",
94
+ "copy-webpack-plugin": "11.0.0",
95
+ "core-js": "3.23.0",
96
+ "cross-env": "7.0.3",
97
+ "css-loader": "^6.5.1",
98
+ "css-minimizer-webpack-plugin": "^3.2.0",
99
+ "dotenv": "^10.0.0",
100
+ "dotenv-expand": "^5.1.0",
101
+ "eslint": "^8.3.0",
102
+ "eslint-config-ali": "15.1.0",
103
+ "eslint-config-prettier": "9.1.0",
104
+ "eslint-config-react-app": "^7.0.1",
105
+ "eslint-plugin-prettier": "5.2.6",
106
+ "eslint-webpack-plugin": "^3.1.1",
107
+ "extract-zip": "2.0.1",
108
+ "file-loader": "^6.2.0",
109
+ "fs-extra": "^10.0.0",
110
+ "glob-all": "3.3.1",
111
+ "html-webpack-plugin": "^5.5.0",
112
+ "husky": "8.0.3",
113
+ "identity-obj-proxy": "^3.0.0",
114
+ "inquirer": "8.0.0",
115
+ "less": "4.1.3",
116
+ "less-loader": "11.0.0",
117
+ "lint-staged": "15.5.1",
118
+ "mini-css-extract-plugin": "^2.7.6",
119
+ "postcss": "^8.4.38",
120
+ "postcss-flexbugs-fixes": "^5.0.2",
121
+ "postcss-loader": "^6.2.1",
122
+ "postcss-normalize": "^10.0.1",
123
+ "postcss-preset-env": "^7.0.1",
124
+ "prettier": "3.5.3",
125
+ "prettier-config-ali": "1.3.2",
126
+ "progress": "2.0.3",
127
+ "progress-bar-webpack-plugin": "2.1.0",
128
+ "prompts": "^2.4.2",
129
+ "purgecss-webpack-plugin": "4.1.3",
130
+ "react": "^18.2.0",
131
+ "react-app-polyfill": "^3.0.0",
132
+ "react-dev-utils": "^12.0.1",
133
+ "react-dom": "^18.2.0",
134
+ "react-refresh": "^0.11.0",
135
+ "resolve": "^1.20.0",
136
+ "resolve-url-loader": "^4.0.0",
137
+ "rimraf": "5.0.7",
138
+ "sass": "1.70.0",
139
+ "sass-loader": "^12.3.0",
140
+ "semver": "^7.3.5",
141
+ "source-map-loader": "^3.0.0",
142
+ "speed-measure-webpack-plugin": "1.5.0",
143
+ "style-loader": "^3.3.1",
144
+ "stylelint": "16.19.1",
145
+ "stylelint-config-ali": "2.1.2",
146
+ "stylelint-prettier": "5.0.3",
147
+ "tailwindcss": "^3.0.2",
148
+ "terser-webpack-plugin": "^5.2.5",
149
+ "thread-loader": "3.0.4",
150
+ "ts-node": "10.9.2",
151
+ "typescript": "4.7.3",
152
+ "unzip": "0.1.11",
153
+ "url-loader": "4.1.1",
154
+ "webpack": "^5.64.4",
155
+ "webpack-bundle-analyzer": "4.5.0",
156
+ "webpack-cli": "4.9.2",
157
+ "webpack-dev-server": "^4.6.0",
158
+ "webpack-manifest-plugin": "^4.0.2",
159
+ "webpack-merge": "5.8.0",
160
+ "workbox-webpack-plugin": "^6.4.1",
161
+ "yamljs": "0.3.0",
162
+
163
+ "html-webpack-tags-plugin": "^3.0.0",
164
+
165
+ "@commitlint/cli": "^19.8.0"
166
+
167
+ },
168
+ "devDependencies": {
169
+ "@types/autoprefixer": "10.2.0",
170
+ "@types/cli-progress": "3.11.5",
171
+ "@types/colors": "1.2.1",
172
+ "@types/commander": "2.12.2",
173
+ "@types/compression-webpack-plugin": "9.1.1",
174
+ "@types/copy-webpack-plugin": "10.1.0",
175
+ "@types/css-minimizer-webpack-plugin": "3.2.1",
176
+ "@types/extract-zip": "2.0.1",
177
+ "@types/glob": "^8.1.0",
178
+ "@types/html-webpack-plugin": "3.2.9",
179
+ "@types/inquirer": "9.0.7",
180
+ "@types/less": "3.0.6",
181
+ "@types/mini-css-extract-plugin": "2.5.1",
182
+ "@types/node": "14.18.47",
183
+ "@types/progress": "2.0.7",
184
+ "@types/progress-bar-webpack-plugin": "2.1.5",
185
+ "@types/react": "19.1.2",
186
+ "@types/react-dom": "19.1.2",
187
+ "@types/react-refresh": "0.14.6",
188
+ "@types/rimraf": "4.0.5",
189
+ "@types/speed-measure-webpack-plugin": "1.3.6",
190
+ "@types/typescript": "2.0.0",
191
+ "@types/unzip": "0.1.4",
192
+ "@types/webpack": "5.28.5",
193
+ "@types/webpack-bundle-analyzer": "4.7.0",
194
+ "@types/webpack-dev-server": "4.7.2",
195
+ "@types/webpack-merge": "5.0.0",
196
+ "@types/yamljs": "0.2.34",
197
+ "babel-jest": "^27.4.2",
198
+ "jest": "^27.4.3",
199
+ "jest-resolve": "^27.4.2",
200
+ "jest-watch-typeahead": "^1.0.0"
201
+ },
202
+ "email": "296963166@qq.com"
203
+ }