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 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
- const ftpUploadChoice = await (0, import_prompts.select)({
98
- message: "\u662F\u5426\u4E0A\u4F20FTP",
99
- choices: ["\u662F", "\u5426"],
100
- default: "\u662F"
101
- });
102
- if (ftpUploadChoice === "\u5426") return;
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\u26A0\uFE0F \u4EE5\u4E0BFTP\u914D\u7F6E\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570\uFF0C\u5DF2\u4ECE\u9009\u62E9\u5217\u8868\u4E2D\u6392\u9664:"));
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("\u2705 \u5907\u4EFD\u5B8C\u6210");
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(` ${backupUrl}`));
300
+ console.log(import_chalk.default.green(`\u{1F517} ${backupUrl}`));
297
301
  console.log();
298
302
  } catch (error) {
299
- backupSpinner.fail("\u274C \u5907\u4EFD\u5931\u8D25");
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("\u26A0\uFE0F \u672A\u627E\u5230\u9700\u8981\u5907\u4EFD\u7684\u6587\u4EF6");
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(`\u26A0\uFE0F \u5907\u4EFD\u6587\u4EF6 ${fileName} \u5931\u8D25:`), error instanceof Error ? error.message : error);
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("\u2705 \u5907\u4EFD\u5B8C\u6210");
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(` ${url}`));
386
+ console.log(import_chalk.default.green(`\u{1F517} ${url}`));
383
387
  });
384
388
  console.log();
385
389
  } else {
386
- backupProgressSpinner.fail("\u274C \u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
390
+ backupProgressSpinner.fail("\u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
387
391
  }
388
392
  } catch (error) {
389
393
  if (backupProgressSpinner) {
390
- backupProgressSpinner.fail("\u274C \u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
394
+ backupProgressSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
391
395
  } else {
392
- backupSpinner.fail("\u274C \u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
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
- const ftpUploadChoice = await select({
64
- message: "\u662F\u5426\u4E0A\u4F20FTP",
65
- choices: ["\u662F", "\u5426"],
66
- default: "\u662F"
67
- });
68
- if (ftpUploadChoice === "\u5426") return;
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\u26A0\uFE0F \u4EE5\u4E0BFTP\u914D\u7F6E\u7F3A\u5C11\u5FC5\u9700\u53C2\u6570\uFF0C\u5DF2\u4ECE\u9009\u62E9\u5217\u8868\u4E2D\u6392\u9664:"));
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("\u2705 \u5907\u4EFD\u5B8C\u6210");
264
+ backupSpinner.succeed("\u5907\u4EFD\u5B8C\u6210");
261
265
  console.log(chalk.cyan("\n\u5907\u4EFD\u6587\u4EF6:"));
262
- console.log(chalk.green(` ${backupUrl}`));
266
+ console.log(chalk.green(`\u{1F517} ${backupUrl}`));
263
267
  console.log();
264
268
  } catch (error) {
265
- backupSpinner.fail("\u274C \u5907\u4EFD\u5931\u8D25");
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("\u26A0\uFE0F \u672A\u627E\u5230\u9700\u8981\u5907\u4EFD\u7684\u6587\u4EF6");
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(`\u26A0\uFE0F \u5907\u4EFD\u6587\u4EF6 ${fileName} \u5931\u8D25:`), error instanceof Error ? error.message : error);
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("\u2705 \u5907\u4EFD\u5B8C\u6210");
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(` ${url}`));
352
+ console.log(chalk.green(`\u{1F517} ${url}`));
349
353
  });
350
354
  console.log();
351
355
  } else {
352
- backupProgressSpinner.fail("\u274C \u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
356
+ backupProgressSpinner.fail("\u6240\u6709\u6587\u4EF6\u5907\u4EFD\u5931\u8D25");
353
357
  }
354
358
  } catch (error) {
355
359
  if (backupProgressSpinner) {
356
- backupProgressSpinner.fail("\u274C \u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
360
+ backupProgressSpinner.fail("\u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
357
361
  } else {
358
- backupSpinner.fail("\u274C \u5907\u4EFD\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF");
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.0.0",
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
+ })