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 +1 -1
- package/src/neo/neoService.js +9 -3
- package/src/utils/cmpUtils/createCmpByZip.js +54 -16
- package/test/demo2.js +3 -0
package/package.json
CHANGED
package/src/neo/neoService.js
CHANGED
|
@@ -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
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
72
|
-
.copy(cmpSourcePath, targetComponentsDir)
|
|
73
|
-
|
|
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
|
|
119
|
+
spinner.fail(`${consoleTag}从 zip 包创建自定义组件失败(${finalCmpName}):`, error);
|
|
82
120
|
// 清理临时目录
|
|
83
121
|
await fs.remove(tempDir);
|
|
84
122
|
|
package/test/demo2.js
ADDED