neo-cmp-cli 1.6.0-beta.10 → 1.6.0-beta.12

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-cmp-cli",
3
- "version": "1.6.0-beta.10",
3
+ "version": "1.6.0-beta.12",
4
4
  "description": "前端脚手架:自定义组件开发工具,支持react 和 vue2.0技术栈。",
5
5
  "keywords": [
6
6
  "neo-cli",
@@ -161,6 +161,7 @@ class NeoService {
161
161
  spinner.stop();
162
162
  return access_token;
163
163
  } catch (error) {
164
+ spinner.fail('获取 token 失败');
164
165
  console.error('\n获取 token 失败:', error.message);
165
166
  console.error('\ntoken 授权地址:', tokenUrl);
166
167
  console.error('\ntoken 请求参数:', formData);
@@ -194,9 +195,14 @@ class NeoService {
194
195
  return await this.getToken();
195
196
  } else if (this.isTokenExpired()) {
196
197
  const spinner = ora('token 已过期,正在刷新...').start();
197
- const token = await this.refreshToken();
198
- spinner.succeed('token 刷新成功。');
199
- return token;
198
+ try {
199
+ const token = await this.refreshToken();
200
+ spinner.succeed('token 刷新成功。');
201
+ return token;
202
+ } catch (error) {
203
+ spinner.fail('token 刷新失败。');
204
+ throw error;
205
+ }
200
206
  }
201
207
  return this.tokenCache.token;
202
208
  }
@@ -31,25 +31,59 @@ module.exports = async function (cmpZipUrl, cmpName, componentBaseDir = './src/c
31
31
  // 创建临时目录
32
32
  const tempDir = path.join(process.cwd(), '.neo-cli', 'zip-source');
33
33
 
34
+ const spinner = ora(`${consoleTag}正在下载组件源码...`).start();
35
+
34
36
  // 下载源码文件并解析到 src/components 目录下
35
37
  try {
36
38
  await fs.ensureDir(tempDir); // 如果目录不存在,会自动创建(包括所有必要的父目录)
37
-
38
- // 下载 zip 文件
39
- const spinner = ora(`${consoleTag}正在下载组件源码...`).start();
39
+
40
40
  const zipFilePath = path.join(tempDir, `${finalCmpName}.zip`);
41
-
42
- const response = await axios({
43
- url: cmpZipUrl,
44
- method: 'GET',
45
- responseType: 'arraybuffer'
46
- });
41
+
42
+ // 下载 zip 文件
43
+ let response;
44
+ try {
45
+ response = await axios({
46
+ url: cmpZipUrl,
47
+ method: 'GET',
48
+ responseType: 'arraybuffer',
49
+ timeout: 60000, // 60秒超时
50
+ maxContentLength: Infinity,
51
+ maxBodyLength: Infinity
52
+ });
53
+ } catch (axiosError) {
54
+ spinner.fail(`${consoleTag}下载文件失败:`, axiosError.message);
55
+ throw writeError;
56
+ }
47
57
 
48
58
  // 保存 zip 文件到临时目录
49
- await fs.writeFile(zipFilePath, response.data);
59
+ try {
60
+ let buffer;
61
+ // 处理不同的数据类型
62
+ if (Buffer.isBuffer(response.data)) {
63
+ // 如果已经是 Buffer,直接使用
64
+ buffer = response.data;
65
+ } else if (response.data instanceof ArrayBuffer) {
66
+ // 如果是 ArrayBuffer,转换为 Buffer
67
+ buffer = Buffer.from(response.data);
68
+ } else if (response.data.buffer instanceof ArrayBuffer) {
69
+ // 如果是 TypedArray (如 Uint8Array),使用其 buffer
70
+ buffer = Buffer.from(response.data.buffer);
71
+ } else {
72
+ // 尝试直接转换
73
+ buffer = Buffer.from(response.data);
74
+ }
75
+
76
+ await fs.writeFile(zipFilePath, buffer);
77
+ } catch (writeError) {
78
+ spinner.fail(`${consoleTag}保存文件失败`);
79
+ console.error(`写入文件错误:`, writeError);
80
+ console.error(`错误堆栈:`, writeError.stack);
81
+ throw writeError;
82
+ }
50
83
 
51
84
  // 解压 zip 文件
52
- spinner.text(`${consoleTag}正在解压组件源码...`);
85
+ spinner.info(`${consoleTag}正在解压组件源码...`);
86
+
53
87
  const zip = new AdmZip(zipFilePath);
54
88
  const extractPath = path.join(tempDir, finalCmpName);
55
89
  zip.extractAllTo(extractPath, true);
@@ -60,7 +94,7 @@ module.exports = async function (cmpZipUrl, cmpName, componentBaseDir = './src/c
60
94
  if (!fs.existsSync(cmpSourcePath)) {
61
95
  spinner.fail(`${consoleTag}解压后的 zip 包中未找到 ${finalCmpName} 组件源码目录。`);
62
96
  await fs.remove(tempDir);
63
- process.exit(1);
97
+ return false;
64
98
  }
65
99
 
66
100
  // 确保目标目录存在
@@ -68,9 +102,13 @@ module.exports = async function (cmpZipUrl, cmpName, componentBaseDir = './src/c
68
102
  await fs.ensureDir(targetComponentsDir);
69
103
 
70
104
  // 复制 src/components 目录下的所有内容到目标目录
71
- await fs
72
- .copy(cmpSourcePath, targetComponentsDir)
73
- .catch((err) => spinner.fail(`${consoleTag}自定义组件模板下载失败:${err.message || err}`));
105
+ try {
106
+ await fs.copy(cmpSourcePath, targetComponentsDir);
107
+ } catch (err) {
108
+ spinner.fail(`${consoleTag}自定义组件模板下载失败:${err.message || err}`);
109
+ await fs.remove(tempDir);
110
+ return false;
111
+ }
74
112
 
75
113
  // 清理临时目录
76
114
  await fs.remove(tempDir);
@@ -78,7 +116,7 @@ module.exports = async function (cmpZipUrl, cmpName, componentBaseDir = './src/c
78
116
 
79
117
  return true;
80
118
  } catch (error) {
81
- spinner.fail(`${consoleTag}从 zip 包创建自定义组件失败(${finalCmpName}):`, error.message);
119
+ spinner.fail(`${consoleTag}从 zip 包创建自定义组件失败(${finalCmpName}):`, error);
82
120
  // 清理临时目录
83
121
  await fs.remove(tempDir);
84
122
 
package/test/demo2.js ADDED
@@ -0,0 +1,3 @@
1
+ const createCmpByZip = require('../src/utils/cmpUtils/createCmpByZip');
2
+
3
+ createCmpByZip('https://publicfront-1253467224.cos.ap-beijing.myqcloud.com/customComponent/crm-cd/tenant/3256219432312412/1762331900697/entityDetailSource.zip', 'entity-detail');