jjb-cmd 2.4.0 → 2.5.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,186 +1,164 @@
1
- <h1>重庆市建教帮科技有限公司-前端脚手架</h1>
2
- <h3>更新日志:</h3>
3
- <ul>
4
- <li>
5
- <p>2.2.12</p>
6
- <div>修复已知问题</div>
7
- </li>
8
- <li>
9
- <p>2.2.11</p>
10
- <div>修改git仓库提交先update,去掉强制提交</div>
11
- </li>
12
- <li>
13
- <p>2.2.10</p>
14
- <div>publish增加设置是否需要提交信息pushMessage</div>
15
- </li>
16
- <li>
17
- <p>2.2.9</p>
18
- <div>publish增加输出日志</div>
19
- </li>
20
- <li>
21
- <p>2.2.7</p>
22
- <div>增加请求方式切换method</div>
23
- </li>
24
- <li>
25
- <p>2.2.6</p>
26
- <div>修复已知问题</div>
27
- </li>
28
- <li>
29
- <p>2.2.5</p>
30
- <div>修复已知问题</div>
31
- </li>
32
- <li>
33
- <p>2.2.4</p>
34
- <div>push java支持更多参数</div>
35
- </li>
36
- <li>
37
- <p>2.2.3</p>
38
- <div>修复已知问题</div>
39
- </li>
40
- <li>
41
- <p>2.2.2</p>
42
- <div>修复已知问题</div>
43
- </li>
44
- <li>
45
- <p>2.2.1</p>
46
- <div>push java增加--force参数,强制拉取新项目</div>
47
- </li>
48
- <li>
49
- <p>2.2.0</p>
50
- <div>增加jenkins构建命令</div>
51
- </li>
52
- <li>
53
- <p>2.1.37</p>
54
- <div>修复已知问题</div>
55
- </li>
56
- <li>
57
- <p>2.1.36</p>
58
- <div>完善推送java壳子命令</div>
59
- </li>
60
- <li>
61
- <p>2.1.35</p>
62
- <div>修复publish推送数据提取匹配规则</div>
63
- </li>
64
- <li>
65
- <p>2.1.34</p>
66
- <div>修复已知问题</div>
67
- </li>
68
- <li>
69
- <p>2.1.32</p>
70
- <div>修复已知问题</div>
71
- </li>
72
- <li>
73
- <p>2.1.31</p>
74
- <div>修复已知问题</div>
75
- </li>
76
- <li>
77
- <p>2.1.30</p>
78
- <div>增加push-set命令</div>
79
- </li>
80
- <li>
81
- <p>2.1.29</p>
82
- <div>修复已知问题</div>
83
- </li>
84
- <li>
85
- <p>2.1.28</p>
86
- <div>修复已知问题</div>
87
- </li>
88
- <li>
89
- <p>2.1.27</p>
90
- <div>修复提取配置信息规则</div>
91
- </li>
92
- <li>
93
- <p>2.1.26</p>
94
- <div>1、增加组件配置信息提取</div>
95
- <div>2、增加jjb-cmd环境切换jjb-cmd env test/prod</div>
96
- </li>
97
- <li>
98
- <p>2.1.25</p>
99
- <div>修复已知问题</div>
100
- </li>
101
- <li>
102
- <p>2.1.24</p>
103
- <div>1、支持compoent.config.json共享文件</div>
104
- <div>2、提交组件支持ReactNode转换</div>
105
- </li>
106
- <li>
107
- <p>2.1.23</p>
108
- <div>publish增加缩略图限制</div>
109
- </li>
110
- <li>
111
- <p>2.1.22</p>
112
- <div>修复已知问题</div>
113
- </li>
114
- <li>
115
- <p>2.1.21</p>
116
- <div>修复已知问题</div>
117
- </li>
118
- <li>
119
- <p>2.1.20</p>
120
- <div>增加publish命令,最新完善push组件体系</div>
121
- </li>
122
- <li>
123
- <p>2.1.19</p>
124
- <div>增加动态版本查询,增加应用refresh可刷新package</div>
125
- </li>
126
- <li>
127
- <p>2.1.18</p>
128
- <div>init命令初始化完成,增加询问是否立即安装项目 - 优化完善</div>
129
- </li>
130
- <li>
131
- <p>2.1.17</p>
132
- <div>init命令初始化完成,增加询问是否立即安装项目</div>
133
- </li>
134
- <li>
135
- <p>2.1.15</p>
136
- <div>refresh增加babel配置文件更新</div>
137
- </li>
138
- <li>
139
- <p>2.1.15</p>
140
- <div>push命令增加beta选项</div>
141
- </li>
142
- <li>
143
- <p>2.1.13</p>
144
- <div>增加远程更新配置文件</div>
145
- </li>
146
- <li>
147
- <p>2.1.12</p>
148
- <div>增加install.app</div>
149
- </li>
150
- <li>
151
- <p>2.1.10</p>
152
- <div>组件push增加用户名参数给服务端</div>
153
- </li>
154
- <li>
155
- <p>2.1.8</p>
156
- <div>增加auth登录授权-push java</div>
157
- </li>
158
- <li>
159
- <p>2.1.7</p>
160
- <div>增加auth登录授权</div>
161
- </li>
162
- <li>
163
- <p>2.1.6</p>
164
- <div>增加push组件日志</div>
165
- </li>
166
- <li>
167
- <p>2.1.5</p>
168
- <div>指定java pull工作区域cwd</div>
169
- </li>
170
- <li>
171
- <p>2.1.4</p>
172
- <div>修复问题</div>
173
- </li>
174
- <li>
175
- <p>2.1.3</p>
176
- <div>push指令增加打包到java容器,参数java test(环境) 更新文案(版本描述)</div>
177
- </li>
178
- <li>
179
- <p>2.1.2</p>
180
- <div>修改提交npm代码整体结构</div>
181
- </li>
182
- <li>
183
- <p>2.0.8</p>
184
- <div>修改init指令初始化项目,从gitlab获取</div>
185
- </li>
186
- </ul>
1
+ # JJB-CMD 前端脚手架工具
2
+
3
+ ## 🛠 安装
4
+
5
+ ### 全局安装
6
+
7
+ ```bash
8
+ npm install -g jjb-cmd
9
+ ```
10
+
11
+ ### 本地安装
12
+
13
+ ```bash
14
+ npm install jjb-cmd
15
+ ```
16
+
17
+ ## 快速开始
18
+
19
+ ### 查看版本
20
+
21
+ ```bash
22
+ jjb-cmd v
23
+ ```
24
+
25
+ ### 查看帮助
26
+
27
+ ```bash
28
+ jjb-cmd help
29
+ ```
30
+
31
+ ## 命令说明
32
+
33
+ ### 基础命令
34
+
35
+ | 命令 | 描述 | 示例 |
36
+ |------|------|------|
37
+ | `v` | 查看当前版本 | `jjb-cmd v` |
38
+ | `help` | 显示帮助信息 | `jjb-cmd help` |
39
+
40
+ ### 开发工具
41
+
42
+ #### 代码优化
43
+
44
+ ```bash
45
+ jjb-cmd opti
46
+ ```
47
+
48
+ 自动优化项目代码,包括:
49
+ - 代码格式化和美化
50
+ - 依赖分析和优化建议
51
+ - 性能优化建议
52
+
53
+ ### 组件管理
54
+
55
+ #### 用户认证
56
+
57
+ ```bash
58
+ jjb-cmd auth <username> <password>
59
+ ```
60
+
61
+ **参数说明:**
62
+ - `username`: 用户名
63
+ - `password`: 密码
64
+
65
+ **示例:**
66
+ ```bash
67
+ jjb-cmd auth admin 123456
68
+ ```
69
+
70
+ #### 发布组件
71
+
72
+ ```bash
73
+ jjb-cmd publish <version>
74
+ ```
75
+
76
+ **参数说明:**
77
+ - `version`: 发布版本号,可设置为 `latest`
78
+
79
+ **示例:**
80
+ ```bash
81
+ # 发布指定版本
82
+ jjb-cmd publish 1.0.0
83
+
84
+ # 发布最新版本
85
+ jjb-cmd publish latest
86
+ ```
87
+
88
+ **参数说明:**
89
+ - `yes`: 发布时需要提交信息
90
+ - `no`: 发布时不需要提交信息
91
+
92
+ ### 部署管理
93
+
94
+ #### 推送微应用
95
+
96
+ ```bash
97
+ jjb-cmd push java <env>
98
+ ```
99
+
100
+ **参数说明:**
101
+ - `env`: 部署环境(test/prod)
102
+
103
+ **示例:**
104
+ ```bash
105
+ # 部署到测试环境
106
+ jjb-cmd push java test
107
+
108
+ # 部署到生产环境
109
+ jjb-cmd push java prod
110
+ ```
111
+
112
+ #### 清理操作
113
+
114
+ ```bash
115
+ jjb-cmd rm-rf
116
+ ```
117
+
118
+ 清理临时文件和缓存。
119
+
120
+ ```
121
+
122
+ ## 开发
123
+
124
+ ### 项目结构
125
+
126
+ ```
127
+ jjb-cmd/
128
+ ├── bin/ # 命令行入口
129
+ │ └── command.js
130
+ ├── src/ # 源代码
131
+ │ ├── auth.js # 认证模块
132
+ │ ├── code-optimization.js # 代码优化
133
+ │ ├── config.js # 配置管理
134
+ │ ├── publish.js # 发布模块
135
+ │ ├── push.js # 推送模块
136
+ │ ├── rm-rf.js # 清理模块
137
+ │ └── utils.js # 工具函数
138
+ ├── publish/ # 发布目录
139
+ ├── build.js # 构建脚本
140
+ ├── package.json # 项目配置
141
+ └── README.md # 项目文档
142
+ ```
143
+
144
+ ### 构建
145
+
146
+ ```bash
147
+ node build.js
148
+ ```
149
+
150
+ 构建过程包括:
151
+ 1. 代码混淆
152
+ 2. 文件复制
153
+ 3. 依赖打包
154
+
155
+ ## 更新日志
156
+
157
+ ### v2.5.0 (当前版本)
158
+ - 完善文档和帮助信息
159
+ - 优化错误处理机制
160
+ - 增强代码优化功能
161
+
162
+ ## 许可证
163
+
164
+ 本项目基于 [MIT](LICENSE) 许可证开源。
package/build.js ADDED
@@ -0,0 +1,20 @@
1
+ const child_process = require('child_process');
2
+ const utils = require('./src/utils');
3
+
4
+ // 执行代码混淆
5
+ child_process.execSync(`npx javascript-obfuscator src --output publish/src --config obf.config.json`);
6
+ console.log('obf Done!');
7
+
8
+ // 复制bin目录
9
+ utils.CopyFolder('./bin', './publish/bin', () => {
10
+ console.log('bin Folder Done!');
11
+
12
+ // 复制其他文件
13
+ utils.CopyFile('./package.json', './publish/package.json', () => {
14
+ utils.CopyFile('./README.md', './publish/README.md', () => {
15
+ utils.CopyFile('./LICENSE', './publish/LICENSE', () => {
16
+ console.log('ALL Done !');
17
+ });
18
+ });
19
+ });
20
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "compact": true
3
+ }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "env": "prod",
5
5
  "httpMethod": "http",
6
6
  "pushMessage": "yes",
7
- "version": "2.4.0",
7
+ "version": "2.5.1",
8
8
  "description": "jjb-cmd命令行工具",
9
9
  "main": "index.js",
10
10
  "scripts": {
@@ -14,7 +14,7 @@
14
14
  "bin": {
15
15
  "jjb-cmd": "bin/command.js"
16
16
  },
17
- "author": "jjb-front-team",
17
+ "author": "jiaoxiwei",
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
20
  "@cqsjjb/react-code-optimization": "^0.0.2",
package/src/auth.js CHANGED
@@ -1 +1,47 @@
1
- function a0_0x5215(){const _0x28714f=['146430UwtOrS','exports','11119HqZgaC','join','status','3430HcnsFT','post','log','Auth:\x20登录失败!','exit','3423626isfajn','Auth:\x20登录成功,已缓存登录状态!','4330012OCdxCk','red','30SirDHr','catch','message','Auth:\x20授权登录!','./config','33183SGogAs','data','609aqmGMA','chalk','existsSync','writeFileSync','path','unlinkSync','Auth:\x20','green','4961454imHHFA','../.auth','44248lskThF','axios'];a0_0x5215=function(){return _0x28714f;};return a0_0x5215();}const a0_0x1ecf75=a0_0x435a;(function(_0x4b6a3e,_0x3003d0){const _0x362df2=a0_0x435a,_0x176b70=_0x4b6a3e();while(!![]){try{const _0x2f9c29=-parseInt(_0x362df2(0x149))/0x1+parseInt(_0x362df2(0x151))/0x2+-parseInt(_0x362df2(0x143))/0x3+-parseInt(_0x362df2(0x153))/0x4+parseInt(_0x362df2(0x155))/0x5*(parseInt(_0x362df2(0x147))/0x6)+-parseInt(_0x362df2(0x13b))/0x7*(-parseInt(_0x362df2(0x145))/0x8)+parseInt(_0x362df2(0x139))/0x9*(parseInt(_0x362df2(0x14c))/0xa);if(_0x2f9c29===_0x3003d0)break;else _0x176b70['push'](_0x176b70['shift']());}catch(_0x38d26a){_0x176b70['push'](_0x176b70['shift']());}}}(a0_0x5215,0xd1241));const axios=require(a0_0x1ecf75(0x146)),chalk=require(a0_0x1ecf75(0x13c)),fs=require('fs'),path=require(a0_0x1ecf75(0x13f)),{getApiHost}=require(a0_0x1ecf75(0x138));function a0_0x435a(_0x447faa,_0x4ee1ee){const _0x52156c=a0_0x5215();return a0_0x435a=function(_0x435a7a,_0x5776fb){_0x435a7a=_0x435a7a-0x136;let _0x1d5adf=_0x52156c[_0x435a7a];return _0x1d5adf;},a0_0x435a(_0x447faa,_0x4ee1ee);}module[a0_0x1ecf75(0x148)]=_0x2b76ab=>{const _0x15efbb=a0_0x1ecf75;console[_0x15efbb(0x14e)](_0x15efbb(0x137));const [_0x352ba5,_0x5c8caf]=_0x2b76ab;axios[_0x15efbb(0x14d)](getApiHost()+'/api/auth',{'username':_0x352ba5,'password':_0x5c8caf})['then'](_0x253252=>{const _0x3f094c=_0x15efbb,_0x26b5b3=path[_0x3f094c(0x14a)](__dirname,_0x3f094c(0x144));_0x253252[_0x3f094c(0x13a)][_0x3f094c(0x14b)]?(console[_0x3f094c(0x14e)](chalk[_0x3f094c(0x142)](_0x3f094c(0x152))),fs[_0x3f094c(0x13e)](_0x26b5b3,_0x352ba5+'/'+_0x5c8caf)):(console[_0x3f094c(0x14e)](chalk[_0x3f094c(0x154)](_0x3f094c(0x141)+_0x253252[_0x3f094c(0x13a)]['message'])),fs[_0x3f094c(0x13d)](_0x26b5b3)&&fs[_0x3f094c(0x140)](_0x26b5b3),process[_0x3f094c(0x150)](0x0));})[_0x15efbb(0x156)](_0x2d1e35=>{const _0x11d4ed=_0x15efbb;console[_0x11d4ed(0x14e)](chalk[_0x11d4ed(0x142)](_0x11d4ed(0x14f)+_0x2d1e35[_0x11d4ed(0x136)])),process[_0x11d4ed(0x150)](0x0);});};
1
+ const axios = require('axios');
2
+ const path = require('path');
3
+ const { getApiHost } = require('./config');
4
+ const {
5
+ logInfo,
6
+ logSuccess,
7
+ logError,
8
+ writeFile,
9
+ fileExists,
10
+ deleteFile
11
+ } = require('./utils');
12
+
13
+ /**
14
+ * 用户认证模块
15
+ * @param {string[]} args - 命令行参数 [username, password]
16
+ */
17
+ module.exports = args => {
18
+ // 参数验证
19
+ if (!args || args.length < 2) {
20
+ logError('用户名和密码参数不能为空!');
21
+ process.exit(1);
22
+ }
23
+
24
+ const [ username, password ] = args;
25
+ logInfo('Auth: 授权登录!');
26
+
27
+ const authPath = path.join(__dirname, '../.auth');
28
+
29
+ axios.post(`${getApiHost()}/api/auth`, {
30
+ username,
31
+ password
32
+ }).then(res => {
33
+ if (res.data.status) {
34
+ logSuccess('Auth: 登录成功,已缓存登录状态!');
35
+ writeFile(authPath, `${username}/${password}`);
36
+ } else {
37
+ logError(`Auth: ${res.data.message}`);
38
+ if (fileExists(authPath)) {
39
+ deleteFile(authPath);
40
+ }
41
+ process.exit(1);
42
+ }
43
+ }).catch(e => {
44
+ logError(`Auth: 登录失败!${e.message}`);
45
+ process.exit(1);
46
+ });
47
+ };
@@ -1,48 +1,49 @@
1
- const a1_0x57a530 = a1_0x5189;
2
- (function (_0x343088, _0x157b6a) {
3
- const _0x58eef2 = a1_0x5189, _0x497601 = _0x343088();
4
- while (!![]) {
5
- try {
6
- const _0x311d74 = -parseInt(_0x58eef2(0x132)) / 0x1 * (-parseInt(_0x58eef2(0x138)) / 0x2) + -parseInt(_0x58eef2(0x133)) / 0x3 * (-parseInt(_0x58eef2(0x143)) / 0x4) + parseInt(_0x58eef2(0x137)) / 0x5 * (-parseInt(_0x58eef2(0x13a)) / 0x6) + parseInt(_0x58eef2(0x130)) / 0x7 + -parseInt(_0x58eef2(0x147)) / 0x8 * (-parseInt(_0x58eef2(0x131)) / 0x9) + parseInt(_0x58eef2(0x144)) / 0xa * (parseInt(_0x58eef2(0x13c)) / 0xb) + -parseInt(_0x58eef2(0x13b)) / 0xc;
7
- if (_0x311d74 === _0x157b6a) break; else _0x497601[ 'push' ](_0x497601[ 'shift' ]());
8
- } catch (_0x17df20) {
9
- _0x497601[ 'push' ](_0x497601[ 'shift' ]());
10
- }
11
- }
12
- }(a1_0x57b7, 0x4e77c));
1
+ const path = require('path');
2
+ const readline = require('readline');
3
+ const { bootstrap } = require('@cqsjjb/react-code-optimization');
4
+ const {
5
+ logInfo,
6
+ logSuccess,
7
+ logError,
8
+ logWarning
9
+ } = require('./utils');
13
10
 
14
- function a1_0x57b7() {
15
- const _0x4c48c4 = [ '10kvaVeU', '10WAMqzY', 'path', '1213788MZGceV', '13229448VPgvxg', '209fehNeK', 'exit', 'readline', 'log', '@cqsjjb/react-code-optimization', 'createInterface', 'exports', '64564nsUemA', '10910waQoSR', 'resolve', 'trim', '376aINSMU', 'stdin', '3752763fabIEd', '114705bJuXcT', '115151JrABAG', '18aIdwhO', '是否确认优化代码?[y/n]:', 'question', '取消优化。' ];
16
- a1_0x57b7 = function () {
17
- return _0x4c48c4;
18
- };
19
- return a1_0x57b7();
20
- }
11
+ const io = readline.createInterface({
12
+ input: process.stdin,
13
+ output: process.stdout
14
+ });
21
15
 
22
- function a1_0x5189(_0x2d15b4, _0x5ec83c) {
23
- const _0x57b760 = a1_0x57b7();
24
- return a1_0x5189 = function (_0x51890d, _0x3bbeac) {
25
- _0x51890d = _0x51890d - 0x12f;
26
- let _0x2cd13e = _0x57b760[ _0x51890d ];
27
- return _0x2cd13e;
28
- }, a1_0x5189(_0x2d15b4, _0x5ec83c);
29
- }
16
+ /**
17
+ * 代码优化模块
18
+ * 使用 @cqsjjb/react-code-optimization 进行代码优化
19
+ */
20
+ module.exports = function () {
21
+ const rootPath = path.resolve('./');
22
+
23
+ logInfo('代码优化工具');
24
+ logWarning('此操作将优化当前目录下的代码,请确保已备份重要文件!');
30
25
 
31
- const path = require(a1_0x57a530(0x139)),
32
- readline = require(a1_0x57a530(0x13e)), { bootstrap } = require(a1_0x57a530(0x140)),
33
- io = readline[ a1_0x57a530(0x141) ]({
34
- 'input': process[ a1_0x57a530(0x12f) ],
35
- 'output': process[ 'stdout' ]
36
- });
37
- module[ a1_0x57a530(0x142) ] = function () {
38
- const _0x5e1185 = a1_0x57a530, _0x30fbeb = path[ _0x5e1185(0x145) ]('./');
39
- io[ _0x5e1185(0x135) ](_0x5e1185(0x134), function (_0x4edbbc) {
40
- const _0x418207 = _0x5e1185;
41
- if (_0x4edbbc[ _0x418207(0x146) ]() === 'y') bootstrap(_0x30fbeb, 0x64, () => {
42
- const _0x1aefbb = _0x418207;
43
- console[ _0x1aefbb(0x13f) ]('优化完成。'), process[ _0x1aefbb(0x13d) ](0x0);
44
- }); else _0x4edbbc[ _0x418207(0x146) ]() === 'n'
45
- ? (console[ _0x418207(0x13f) ](_0x418207(0x136)), process[ _0x418207(0x13d) ](0x0))
46
- : (console[ _0x418207(0x13f) ]('无效操作。'), process[ _0x418207(0x13d) ](0x0));
26
+ io.question('是否确认优化代码?[y/n]:', function (answer) {
27
+ const trimmedAnswer = answer.trim().toLowerCase();
28
+
29
+ if (trimmedAnswer === 'y' || trimmedAnswer === 'yes') {
30
+ logInfo('开始代码优化...');
31
+
32
+ try {
33
+ bootstrap(rootPath, 100, () => {
34
+ logSuccess('优化完成。');
35
+ process.exit(0);
36
+ });
37
+ } catch (error) {
38
+ logError(`代码优化过程中发生错误:${error.message}`);
39
+ process.exit(1);
40
+ }
41
+ } else if (trimmedAnswer === 'n' || trimmedAnswer === 'no') {
42
+ logInfo('取消优化。');
43
+ process.exit(0);
44
+ } else {
45
+ logError('无效操作,请输入 y 或 n。');
46
+ process.exit(1);
47
+ }
47
48
  });
48
49
  };