vite-plugin-deploy-ftp 1.0.0 → 1.1.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/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +22 -18
- package/dist/index.mjs +22 -18
- package/index.html +14 -0
- package/package.json +3 -2
- package/vite.config.ts +43 -0
package/dist/index.d.mts
CHANGED
|
@@ -8,6 +8,7 @@ type vitePluginDeployFtpOption = ({
|
|
|
8
8
|
maxRetries?: number;
|
|
9
9
|
retryDelay?: number;
|
|
10
10
|
showBackFile?: boolean;
|
|
11
|
+
autoUpload?: boolean;
|
|
11
12
|
} & {
|
|
12
13
|
ftps: {
|
|
13
14
|
name: string;
|
|
@@ -26,6 +27,7 @@ type vitePluginDeployFtpOption = ({
|
|
|
26
27
|
maxRetries?: number;
|
|
27
28
|
retryDelay?: number;
|
|
28
29
|
showBackFile?: boolean;
|
|
30
|
+
autoUpload?: boolean;
|
|
29
31
|
} & {
|
|
30
32
|
name?: string;
|
|
31
33
|
host?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ type vitePluginDeployFtpOption = ({
|
|
|
8
8
|
maxRetries?: number;
|
|
9
9
|
retryDelay?: number;
|
|
10
10
|
showBackFile?: boolean;
|
|
11
|
+
autoUpload?: boolean;
|
|
11
12
|
} & {
|
|
12
13
|
ftps: {
|
|
13
14
|
name: string;
|
|
@@ -26,6 +27,7 @@ type vitePluginDeployFtpOption = ({
|
|
|
26
27
|
maxRetries?: number;
|
|
27
28
|
retryDelay?: number;
|
|
28
29
|
showBackFile?: boolean;
|
|
30
|
+
autoUpload?: boolean;
|
|
29
31
|
} & {
|
|
30
32
|
name?: string;
|
|
31
33
|
host?: string;
|
package/dist/index.js
CHANGED
|
@@ -51,7 +51,8 @@ function vitePluginDeployFtp(option) {
|
|
|
51
51
|
singleBackFiles = ["index.html"],
|
|
52
52
|
showBackFile = false,
|
|
53
53
|
maxRetries = 3,
|
|
54
|
-
retryDelay = 1e3
|
|
54
|
+
retryDelay = 1e3,
|
|
55
|
+
autoUpload = false
|
|
55
56
|
} = option || {};
|
|
56
57
|
const isMultiFtp = "ftps" in option;
|
|
57
58
|
const ftpConfigs = isMultiFtp ? option.ftps : [{ ...option, name: option.name || option.alias || option.host }];
|
|
@@ -94,12 +95,14 @@ function vitePluginDeployFtp(option) {
|
|
|
94
95
|
}
|
|
95
96
|
};
|
|
96
97
|
async function deployToFtp() {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
if (!autoUpload) {
|
|
99
|
+
const ftpUploadChoice = await (0, import_prompts.select)({
|
|
100
|
+
message: "\u662F\u5426\u4E0A\u4F20FTP",
|
|
101
|
+
choices: ["\u662F", "\u5426"],
|
|
102
|
+
default: "\u662F"
|
|
103
|
+
});
|
|
104
|
+
if (ftpUploadChoice === "\u5426") return;
|
|
105
|
+
}
|
|
103
106
|
let selectedConfigs = [];
|
|
104
107
|
if (isMultiFtp) {
|
|
105
108
|
if (defaultFtp) {
|
|
@@ -117,7 +120,7 @@ function vitePluginDeployFtp(option) {
|
|
|
117
120
|
const validConfigs = ftpConfigs.filter(validateFtpConfig);
|
|
118
121
|
const invalidConfigs = ftpConfigs.filter((config) => !validateFtpConfig(config));
|
|
119
122
|
if (invalidConfigs.length > 0) {
|
|
120
|
-
console.log(import_chalk.default.yellow("\n
|
|
123
|
+
console.log(import_chalk.default.yellow("\n \u4EE5\u4E0BFTP\u914D\u7F6E\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570\uFF0C\u5DF2\u4ECE\u9009\u62E9\u5217\u8868\u4E2D\u6392\u9664:"));
|
|
121
124
|
invalidConfigs.forEach((config) => {
|
|
122
125
|
const missing = [];
|
|
123
126
|
if (!config.host) missing.push("host");
|
|
@@ -195,6 +198,7 @@ function vitePluginDeployFtp(option) {
|
|
|
195
198
|
uploadFileSpinner.succeed(
|
|
196
199
|
`\u{1F389} \u4E0A\u4F20\u5230 ${displayName} \u6210\u529F! \u8BBF\u95EE\u5730\u5740: ` + import_chalk.default.green(buildUrl(protocol, baseUrl, uploadPath))
|
|
197
200
|
);
|
|
201
|
+
console.log();
|
|
198
202
|
} catch (error) {
|
|
199
203
|
if (uploadSpinner) {
|
|
200
204
|
uploadSpinner.fail(`\u274C \u4E0A\u4F20\u5230 ${displayName} \u5931\u8D25`);
|
|
@@ -291,12 +295,12 @@ async function createBackupFile(client, dir, protocol, baseUrl, showBackFile = f
|
|
|
291
295
|
)}`;
|
|
292
296
|
await client.uploadFrom(zipFilePath, (0, import_vite.normalizePath)(`${dir}/${fileName}`));
|
|
293
297
|
const backupUrl = buildUrl(protocol, baseUrl, `${dir}/${fileName}`);
|
|
294
|
-
backupSpinner.succeed("\
|
|
298
|
+
backupSpinner.succeed("\u5907\u4EFD\u5B8C\u6210");
|
|
295
299
|
console.log(import_chalk.default.cyan("\n\u5907\u4EFD\u6587\u4EF6:"));
|
|
296
|
-
console.log(import_chalk.default.green(
|
|
300
|
+
console.log(import_chalk.default.green(`\u{1F517} ${backupUrl}`));
|
|
297
301
|
console.log();
|
|
298
302
|
} catch (error) {
|
|
299
|
-
backupSpinner.fail("\
|
|
303
|
+
backupSpinner.fail("\u5907\u4EFD\u5931\u8D25");
|
|
300
304
|
throw error;
|
|
301
305
|
} finally {
|
|
302
306
|
tempDir.cleanup();
|
|
@@ -338,7 +342,7 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
338
342
|
return remoteFile ? { fileName, exists: true } : { fileName, exists: false };
|
|
339
343
|
}).filter((task) => task.exists);
|
|
340
344
|
if (backupTasks.length === 0) {
|
|
341
|
-
backupSpinner.warn("\
|
|
345
|
+
backupSpinner.warn("\u672A\u627E\u5230\u9700\u8981\u5907\u4EFD\u7684\u6587\u4EF6");
|
|
342
346
|
return;
|
|
343
347
|
}
|
|
344
348
|
backupSpinner.stop();
|
|
@@ -368,7 +372,7 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
368
372
|
backedUpFiles.push(backupUrl);
|
|
369
373
|
return true;
|
|
370
374
|
} catch (error) {
|
|
371
|
-
console.warn(import_chalk.default.yellow(`\
|
|
375
|
+
console.warn(import_chalk.default.yellow(`\u5907\u4EFD\u6587\u4EF6 ${fileName} \u5931\u8D25:`), error instanceof Error ? error.message : error);
|
|
372
376
|
return false;
|
|
373
377
|
}
|
|
374
378
|
});
|
|
@@ -376,20 +380,20 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
376
380
|
backedUpCount += results.filter(Boolean).length;
|
|
377
381
|
}
|
|
378
382
|
if (backedUpCount > 0) {
|
|
379
|
-
backupProgressSpinner.succeed("\
|
|
383
|
+
backupProgressSpinner.succeed("\u5907\u4EFD\u5B8C\u6210");
|
|
380
384
|
console.log(import_chalk.default.cyan("\n\u5907\u4EFD\u6587\u4EF6:"));
|
|
381
385
|
backedUpFiles.forEach((url) => {
|
|
382
|
-
console.log(import_chalk.default.green(
|
|
386
|
+
console.log(import_chalk.default.green(`\u{1F517} ${url}`));
|
|
383
387
|
});
|
|
384
388
|
console.log();
|
|
385
389
|
} else {
|
|
386
|
-
backupProgressSpinner.fail("\
|
|
390
|
+
backupProgressSpinner.fail("\u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
|
|
387
391
|
}
|
|
388
392
|
} catch (error) {
|
|
389
393
|
if (backupProgressSpinner) {
|
|
390
|
-
backupProgressSpinner.fail("\
|
|
394
|
+
backupProgressSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
|
|
391
395
|
} else {
|
|
392
|
-
backupSpinner.fail("\
|
|
396
|
+
backupSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
|
|
393
397
|
}
|
|
394
398
|
throw error;
|
|
395
399
|
} finally {
|
package/dist/index.mjs
CHANGED
|
@@ -17,7 +17,8 @@ function vitePluginDeployFtp(option) {
|
|
|
17
17
|
singleBackFiles = ["index.html"],
|
|
18
18
|
showBackFile = false,
|
|
19
19
|
maxRetries = 3,
|
|
20
|
-
retryDelay = 1e3
|
|
20
|
+
retryDelay = 1e3,
|
|
21
|
+
autoUpload = false
|
|
21
22
|
} = option || {};
|
|
22
23
|
const isMultiFtp = "ftps" in option;
|
|
23
24
|
const ftpConfigs = isMultiFtp ? option.ftps : [{ ...option, name: option.name || option.alias || option.host }];
|
|
@@ -60,12 +61,14 @@ function vitePluginDeployFtp(option) {
|
|
|
60
61
|
}
|
|
61
62
|
};
|
|
62
63
|
async function deployToFtp() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
if (!autoUpload) {
|
|
65
|
+
const ftpUploadChoice = await select({
|
|
66
|
+
message: "\u662F\u5426\u4E0A\u4F20FTP",
|
|
67
|
+
choices: ["\u662F", "\u5426"],
|
|
68
|
+
default: "\u662F"
|
|
69
|
+
});
|
|
70
|
+
if (ftpUploadChoice === "\u5426") return;
|
|
71
|
+
}
|
|
69
72
|
let selectedConfigs = [];
|
|
70
73
|
if (isMultiFtp) {
|
|
71
74
|
if (defaultFtp) {
|
|
@@ -83,7 +86,7 @@ function vitePluginDeployFtp(option) {
|
|
|
83
86
|
const validConfigs = ftpConfigs.filter(validateFtpConfig);
|
|
84
87
|
const invalidConfigs = ftpConfigs.filter((config) => !validateFtpConfig(config));
|
|
85
88
|
if (invalidConfigs.length > 0) {
|
|
86
|
-
console.log(chalk.yellow("\n
|
|
89
|
+
console.log(chalk.yellow("\n \u4EE5\u4E0BFTP\u914D\u7F6E\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570\uFF0C\u5DF2\u4ECE\u9009\u62E9\u5217\u8868\u4E2D\u6392\u9664:"));
|
|
87
90
|
invalidConfigs.forEach((config) => {
|
|
88
91
|
const missing = [];
|
|
89
92
|
if (!config.host) missing.push("host");
|
|
@@ -161,6 +164,7 @@ function vitePluginDeployFtp(option) {
|
|
|
161
164
|
uploadFileSpinner.succeed(
|
|
162
165
|
`\u{1F389} \u4E0A\u4F20\u5230 ${displayName} \u6210\u529F! \u8BBF\u95EE\u5730\u5740: ` + chalk.green(buildUrl(protocol, baseUrl, uploadPath))
|
|
163
166
|
);
|
|
167
|
+
console.log();
|
|
164
168
|
} catch (error) {
|
|
165
169
|
if (uploadSpinner) {
|
|
166
170
|
uploadSpinner.fail(`\u274C \u4E0A\u4F20\u5230 ${displayName} \u5931\u8D25`);
|
|
@@ -257,12 +261,12 @@ async function createBackupFile(client, dir, protocol, baseUrl, showBackFile = f
|
|
|
257
261
|
)}`;
|
|
258
262
|
await client.uploadFrom(zipFilePath, normalizePath(`${dir}/${fileName}`));
|
|
259
263
|
const backupUrl = buildUrl(protocol, baseUrl, `${dir}/${fileName}`);
|
|
260
|
-
backupSpinner.succeed("\
|
|
264
|
+
backupSpinner.succeed("\u5907\u4EFD\u5B8C\u6210");
|
|
261
265
|
console.log(chalk.cyan("\n\u5907\u4EFD\u6587\u4EF6:"));
|
|
262
|
-
console.log(chalk.green(
|
|
266
|
+
console.log(chalk.green(`\u{1F517} ${backupUrl}`));
|
|
263
267
|
console.log();
|
|
264
268
|
} catch (error) {
|
|
265
|
-
backupSpinner.fail("\
|
|
269
|
+
backupSpinner.fail("\u5907\u4EFD\u5931\u8D25");
|
|
266
270
|
throw error;
|
|
267
271
|
} finally {
|
|
268
272
|
tempDir.cleanup();
|
|
@@ -304,7 +308,7 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
304
308
|
return remoteFile ? { fileName, exists: true } : { fileName, exists: false };
|
|
305
309
|
}).filter((task) => task.exists);
|
|
306
310
|
if (backupTasks.length === 0) {
|
|
307
|
-
backupSpinner.warn("\
|
|
311
|
+
backupSpinner.warn("\u672A\u627E\u5230\u9700\u8981\u5907\u4EFD\u7684\u6587\u4EF6");
|
|
308
312
|
return;
|
|
309
313
|
}
|
|
310
314
|
backupSpinner.stop();
|
|
@@ -334,7 +338,7 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
334
338
|
backedUpFiles.push(backupUrl);
|
|
335
339
|
return true;
|
|
336
340
|
} catch (error) {
|
|
337
|
-
console.warn(chalk.yellow(`\
|
|
341
|
+
console.warn(chalk.yellow(`\u5907\u4EFD\u6587\u4EF6 ${fileName} \u5931\u8D25:`), error instanceof Error ? error.message : error);
|
|
338
342
|
return false;
|
|
339
343
|
}
|
|
340
344
|
});
|
|
@@ -342,20 +346,20 @@ async function createSingleBackup(client, dir, protocol, baseUrl, singleBackFile
|
|
|
342
346
|
backedUpCount += results.filter(Boolean).length;
|
|
343
347
|
}
|
|
344
348
|
if (backedUpCount > 0) {
|
|
345
|
-
backupProgressSpinner.succeed("\
|
|
349
|
+
backupProgressSpinner.succeed("\u5907\u4EFD\u5B8C\u6210");
|
|
346
350
|
console.log(chalk.cyan("\n\u5907\u4EFD\u6587\u4EF6:"));
|
|
347
351
|
backedUpFiles.forEach((url) => {
|
|
348
|
-
console.log(chalk.green(
|
|
352
|
+
console.log(chalk.green(`\u{1F517} ${url}`));
|
|
349
353
|
});
|
|
350
354
|
console.log();
|
|
351
355
|
} else {
|
|
352
|
-
backupProgressSpinner.fail("\
|
|
356
|
+
backupProgressSpinner.fail("\u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
|
|
353
357
|
}
|
|
354
358
|
} catch (error) {
|
|
355
359
|
if (backupProgressSpinner) {
|
|
356
|
-
backupProgressSpinner.fail("\
|
|
360
|
+
backupProgressSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
|
|
357
361
|
} else {
|
|
358
|
-
backupSpinner.fail("\
|
|
362
|
+
backupSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
|
|
359
363
|
}
|
|
360
364
|
throw error;
|
|
361
365
|
} finally {
|
package/index.html
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>vite-plugin-deploy-ftp</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body></body>
|
|
9
|
+
|
|
10
|
+
<script>
|
|
11
|
+
const time = new Date().toLocaleString()
|
|
12
|
+
document.body.innerHTML = `<h1>vite-plugin-deploy-ftp</h1><p>${time}</p>`
|
|
13
|
+
</script>
|
|
14
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vite-plugin-deploy-ftp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "tsup",
|
|
46
|
-
"pack": "pnpm run build && pnpm pack"
|
|
46
|
+
"pack": "pnpm run build && pnpm pack",
|
|
47
|
+
"build:test": "vite build"
|
|
47
48
|
}
|
|
48
49
|
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import vitePluginDeployFtp from './src'
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
plugins: [
|
|
6
|
+
vitePluginDeployFtp({
|
|
7
|
+
open: true,
|
|
8
|
+
uploadPath: '__test/vite-plugin-deploy-ftp/',
|
|
9
|
+
singleBack: true,
|
|
10
|
+
defaultFtp: process.env.zH5FtpName,
|
|
11
|
+
autoUpload: true,
|
|
12
|
+
ftps: [
|
|
13
|
+
{
|
|
14
|
+
name: process.env.zH5FtpName || process.env.zH5FtpAlias || '',
|
|
15
|
+
host: process.env.zH5FtpHost,
|
|
16
|
+
port: +(process.env.zH5FtpPort || 21),
|
|
17
|
+
user: process.env.zH5FtpUser,
|
|
18
|
+
password: process.env.zH5FtpPassword,
|
|
19
|
+
alias: process.env.zH5FtpAlias,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: process.env.zH5FtpName2 || process.env.zH5FtpAlias2 || '',
|
|
23
|
+
host: process.env.zH5FtpHost2,
|
|
24
|
+
port: +(process.env.zH5FtpPort2 || 21),
|
|
25
|
+
user: process.env.zH5FtpUser2,
|
|
26
|
+
password: process.env.zH5FtpPassword2,
|
|
27
|
+
alias: process.env.zH5FtpAlias2,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: process.env.zQRFtpName || process.env.zQRFtpAlias || '',
|
|
31
|
+
host: process.env.zQRFtpHost,
|
|
32
|
+
port: +(process.env.zQRFtpPort || 21),
|
|
33
|
+
user: process.env.zQRFtpUser,
|
|
34
|
+
password: process.env.zQRFtpPassword,
|
|
35
|
+
alias: process.env.zQRFtpAlias,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
build: {
|
|
41
|
+
outDir: 'dist_test',
|
|
42
|
+
},
|
|
43
|
+
})
|