@electron-forge/plugin-vite 7.8.0 → 7.8.2
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/ViteConfig.d.ts +1 -1
- package/dist/ViteConfig.d.ts.map +1 -1
- package/dist/ViteConfig.js +2 -2
- package/dist/VitePlugin.d.ts +12 -4
- package/dist/VitePlugin.d.ts.map +1 -1
- package/dist/VitePlugin.js +156 -67
- package/package.json +5 -7
- package/src/ViteConfig.ts +1 -1
- package/src/VitePlugin.ts +199 -91
package/dist/ViteConfig.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export default class ViteConfigGenerator {
|
|
|
8
8
|
constructor(pluginConfig: VitePluginConfig, projectDir: string, isProd: boolean);
|
|
9
9
|
resolveConfig(buildConfig: VitePluginBuildConfig | VitePluginRendererConfig, target: Target): Promise<UserConfig>;
|
|
10
10
|
get mode(): string;
|
|
11
|
-
|
|
11
|
+
getBuildConfigs(): Promise<UserConfig[]>;
|
|
12
12
|
getRendererConfig(): Promise<UserConfig[]>;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
package/dist/ViteConfig.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViteConfig.d.ts","sourceRoot":"","sources":["../src/ViteConfig.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAClG,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,MAAM,CAAC;AAIlD,KAAK,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAAoB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAA5F,YAAY,EAAE,gBAAgB,EAAmB,UAAU,EAAE,MAAM,EAAmB,MAAM,EAAE,OAAO;IAI5H,aAAa,CAAC,WAAW,EAAE,qBAAqB,GAAG,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BvH,IAAI,IAAI,IAAI,MAAM,CAKjB;IAEK,
|
|
1
|
+
{"version":3,"file":"ViteConfig.d.ts","sourceRoot":"","sources":["../src/ViteConfig.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAClG,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,MAAM,CAAC;AAIlD,KAAK,MAAM,GAAG,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC;AAExE,MAAM,CAAC,OAAO,OAAO,mBAAmB;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAAoB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAA5F,YAAY,EAAE,gBAAgB,EAAmB,UAAU,EAAE,MAAM,EAAmB,MAAM,EAAE,OAAO;IAI5H,aAAa,CAAC,WAAW,EAAE,qBAAqB,GAAG,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA2BvH,IAAI,IAAI,IAAI,MAAM,CAKjB;IAEK,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAaxC,iBAAiB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAYjD"}
|
package/dist/ViteConfig.js
CHANGED
|
@@ -46,7 +46,7 @@ class ViteConfigGenerator {
|
|
|
46
46
|
// The `mode` set by the end user in `vite.config.js` has a higher priority.
|
|
47
47
|
return this.isProd ? 'production' : 'development';
|
|
48
48
|
}
|
|
49
|
-
async
|
|
49
|
+
async getBuildConfigs() {
|
|
50
50
|
if (!Array.isArray(this.pluginConfig.build)) {
|
|
51
51
|
throw new Error('"config.build" must be an Array');
|
|
52
52
|
}
|
|
@@ -68,4 +68,4 @@ class ViteConfigGenerator {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
exports.default = ViteConfigGenerator;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLCtCQUEwQztBQUUxQyxnRUFBMkU7QUFDM0Usc0VBQWlGO0FBQ2pGLHdFQUFtRjtBQUtuRixNQUFNLENBQUMsR0FBRyxJQUFBLGVBQUssRUFBQyx3Q0FBd0MsQ0FBQyxDQUFDO0FBSTFELE1BQXFCLG1CQUFtQjtJQUN0QyxZQUE2QixZQUE4QixFQUFtQixVQUFrQixFQUFtQixNQUFlO1FBQXJHLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUFtQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQW1CLFdBQU0sR0FBTixNQUFNLENBQVM7UUFDaEksQ0FBQyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBNkQsRUFBRSxNQUFjO1FBQy9GLE1BQU0sU0FBUyxHQUFjO1lBQzNCLHVEQUF1RDtZQUN2RCxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPO1lBQ3hDLDBDQUEwQztZQUMxQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFFZiw2QkFBNkI7WUFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JCLFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWTtZQUM5QixlQUFlLEVBQUUsV0FBVztTQUM3QixDQUFDO1FBRUYsbUdBQW1HO1FBQ25HLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxJQUFBLHlCQUFrQixFQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckYsUUFBUSxNQUFNLEVBQUUsQ0FBQztZQUNmLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUEsNEJBQWlCLEVBQUMsU0FBK0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN4RSxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFBLCtCQUFvQixFQUFDLFNBQStCLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDM0UsS0FBSyxVQUFVO2dCQUNiLE9BQU8sSUFBQSxnQ0FBcUIsRUFBQyxTQUFrQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQy9FO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLE1BQU0sNENBQTRDLENBQUMsQ0FBQztRQUMzRixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLDhDQUE4QztRQUM5QyxpSEFBaUg7UUFDakgsNEVBQTRFO1FBQzVFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7SUFDcEQsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSztZQUNyQyxrREFBa0Q7YUFDakQsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO2FBQzlCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRXZGLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUTtZQUN4QyxrREFBa0Q7YUFDakQsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO2FBQzlCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUVyRSxPQUFPLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFoRUQsc0NBZ0VDIn0=
|
package/dist/VitePlugin.d.ts
CHANGED
|
@@ -1,24 +1,32 @@
|
|
|
1
1
|
import { PluginBase } from '@electron-forge/plugin-base';
|
|
2
|
+
import { Listr } from 'listr2';
|
|
2
3
|
import type { VitePluginConfig } from './Config';
|
|
3
|
-
import type { ForgeMultiHookMap, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
4
|
+
import type { ForgeListrTask, ForgeMultiHookMap, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
4
5
|
export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
5
6
|
private static alreadyStarted;
|
|
6
7
|
name: string;
|
|
7
8
|
private isProd;
|
|
9
|
+
/**
|
|
10
|
+
* Path to the root of the Electron app
|
|
11
|
+
*/
|
|
8
12
|
private projectDir;
|
|
13
|
+
/**
|
|
14
|
+
* Path where Vite output is generated. Usually `${projectDir}/.vite`
|
|
15
|
+
*/
|
|
9
16
|
private baseDir;
|
|
10
17
|
private configGeneratorCache;
|
|
11
18
|
private watchers;
|
|
12
19
|
private servers;
|
|
20
|
+
private timeFormatter;
|
|
13
21
|
init: (dir: string) => void;
|
|
14
22
|
setDirectories(dir: string): void;
|
|
15
23
|
private get configGenerator();
|
|
16
24
|
getHooks: () => ForgeMultiHookMap;
|
|
17
25
|
resolveForgeConfig: (forgeConfig: ResolvedForgeConfig) => Promise<ResolvedForgeConfig>;
|
|
18
26
|
packageAfterCopy: (_forgeConfig: ResolvedForgeConfig, buildPath: string) => Promise<void>;
|
|
19
|
-
build: () => Promise<void>;
|
|
20
|
-
buildRenderer: () => Promise<
|
|
21
|
-
launchRendererDevServers: () => Promise<
|
|
27
|
+
build: (task?: ForgeListrTask<null>) => Promise<Listr | void>;
|
|
28
|
+
buildRenderer: (task?: ForgeListrTask<null>) => Promise<Listr<NewCtx, any, any> | undefined>;
|
|
29
|
+
launchRendererDevServers: (task?: ForgeListrTask<null>) => Promise<Listr<NewCtx, any, any> | undefined>;
|
|
22
30
|
exitHandler: (options: {
|
|
23
31
|
cleanup?: boolean;
|
|
24
32
|
exit?: boolean;
|
package/dist/VitePlugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitePlugin.d.ts","sourceRoot":"","sources":["../src/VitePlugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"VitePlugin.d.ts","sourceRoot":"","sources":["../src/VitePlugin.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9E,OAAO,EAAE,KAAK,EAAgB,MAAM,QAAQ,CAAC;AAM7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAK3G,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,UAAU,CAAC,gBAAgB,CAAC;IAClE,OAAO,CAAC,MAAM,CAAC,cAAc,CAAS;IAE/B,IAAI,SAAU;IAErB,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;IACH,OAAO,CAAC,UAAU,CAAU;IAE5B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,oBAAoB,CAAuB;IAEnD,OAAO,CAAC,QAAQ,CAAmC;IAEnD,OAAO,CAAC,OAAO,CAA4B;IAG3C,OAAO,CAAC,aAAa,CAIlB;IAEH,IAAI,QAAS,MAAM,KAAG,IAAI,CAUxB;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC,OAAO,KAAK,eAAe,GAE1B;IAED,QAAQ,QAAO,iBAAiB,CA8E9B;IAEF,kBAAkB,gBAAuB,mBAAmB,KAAG,QAAQ,mBAAmB,CAAC,CAwBzF;IAEF,gBAAgB,iBAAwB,mBAAmB,aAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CAc5F;IAGF,KAAK,UAAiB,eAAe,IAAI,CAAC,KAAG,QAAQ,KAAK,GAAG,IAAI,CAAC,CAyDhE;IAGF,aAAa,UAAiB,eAAe,IAAI,CAAC,kDAchD;IAEF,wBAAwB,UAAiB,eAAe,IAAI,CAAC,kDAiC3D;IAEF,WAAW,YAAa;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,QAAQ,KAAK,KAAG,IAAI,CAiB/E;CACH;AAuBD,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/VitePlugin.js
CHANGED
|
@@ -4,6 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.VitePlugin = void 0;
|
|
7
|
+
// TODO(erickzhao): Remove this when upgrading to Vite 6 and converting to ESM
|
|
8
|
+
process.env.VITE_CJS_IGNORE_WARNING = 'true';
|
|
7
9
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
10
|
const plugin_base_1 = require("@electron-forge/plugin-base");
|
|
9
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
@@ -21,11 +23,21 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
21
23
|
this.isProd = false;
|
|
22
24
|
this.watchers = [];
|
|
23
25
|
this.servers = [];
|
|
26
|
+
// Matches the format of the default Vite logger
|
|
27
|
+
this.timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
28
|
+
hour: 'numeric',
|
|
29
|
+
minute: 'numeric',
|
|
30
|
+
second: 'numeric',
|
|
31
|
+
});
|
|
24
32
|
this.init = (dir) => {
|
|
25
33
|
this.setDirectories(dir);
|
|
26
34
|
d('hooking process events');
|
|
27
|
-
process.on('exit', (_code) =>
|
|
28
|
-
|
|
35
|
+
process.on('exit', (_code) => {
|
|
36
|
+
this.exitHandler({ cleanup: true });
|
|
37
|
+
});
|
|
38
|
+
process.on('SIGINT', (_signal) => {
|
|
39
|
+
this.exitHandler({ exit: true });
|
|
40
|
+
});
|
|
29
41
|
};
|
|
30
42
|
this.getHooks = () => {
|
|
31
43
|
return {
|
|
@@ -34,12 +46,15 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
34
46
|
if (VitePlugin.alreadyStarted)
|
|
35
47
|
return;
|
|
36
48
|
VitePlugin.alreadyStarted = true;
|
|
49
|
+
d(`preStart: removing old content from ${this.baseDir}`);
|
|
37
50
|
await fs_extra_1.default.remove(this.baseDir);
|
|
38
51
|
return task?.newListr([
|
|
39
52
|
{
|
|
40
|
-
title: 'Launching dev servers for renderer process code',
|
|
41
|
-
task: async () => {
|
|
42
|
-
await this.launchRendererDevServers();
|
|
53
|
+
title: 'Launching Vite dev servers for renderer process code...',
|
|
54
|
+
task: async (_ctx, task) => {
|
|
55
|
+
const result = await this.launchRendererDevServers(task);
|
|
56
|
+
task.title = 'Launched Vite dev servers for renderer process code';
|
|
57
|
+
return result;
|
|
43
58
|
},
|
|
44
59
|
rendererOptions: {
|
|
45
60
|
persistentOutput: true,
|
|
@@ -48,23 +63,41 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
48
63
|
},
|
|
49
64
|
// The main process depends on the `server.port` of the renderer process, so the renderer process is run first.
|
|
50
65
|
{
|
|
51
|
-
title: '
|
|
52
|
-
task: async () => {
|
|
53
|
-
await this.build();
|
|
66
|
+
title: 'Building main process and preload bundles...',
|
|
67
|
+
task: async (_ctx, task) => {
|
|
68
|
+
const result = await this.build(task);
|
|
69
|
+
task.title = 'Built main process and preload bundles';
|
|
70
|
+
return result;
|
|
54
71
|
},
|
|
55
72
|
rendererOptions: {
|
|
73
|
+
persistentOutput: true,
|
|
56
74
|
timer: { ...listr2_1.PRESET_TIMER },
|
|
57
75
|
},
|
|
58
76
|
},
|
|
59
|
-
]);
|
|
60
|
-
}, 'Preparing
|
|
77
|
+
], { concurrent: false });
|
|
78
|
+
}, 'Preparing Vite bundles'),
|
|
61
79
|
],
|
|
62
80
|
prePackage: [
|
|
63
|
-
(0, plugin_base_1.namedHookWithTaskFn)(async () => {
|
|
81
|
+
(0, plugin_base_1.namedHookWithTaskFn)(async (task) => {
|
|
64
82
|
this.isProd = true;
|
|
65
83
|
await fs_extra_1.default.remove(this.baseDir);
|
|
66
|
-
|
|
67
|
-
|
|
84
|
+
return task?.newListr([
|
|
85
|
+
{
|
|
86
|
+
title: 'Building main and preload targets...',
|
|
87
|
+
task: async (_ctx, subtask) => {
|
|
88
|
+
const results = await this.build(subtask);
|
|
89
|
+
return results;
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
title: 'Building renderer targets...',
|
|
94
|
+
task: async (_ctx, subtask) => {
|
|
95
|
+
const results = await this.buildRenderer(subtask);
|
|
96
|
+
return results;
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
], { concurrent: true });
|
|
100
|
+
}, 'Building production Vite bundles'),
|
|
68
101
|
],
|
|
69
102
|
postStart: async (_config, child) => {
|
|
70
103
|
d('hooking electron process exit');
|
|
@@ -103,7 +136,7 @@ Your packaged app may be larger than expected if you dont ignore everything othe
|
|
|
103
136
|
if (!pj.main?.includes('.vite/')) {
|
|
104
137
|
throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
|
|
105
138
|
"main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
|
|
106
|
-
the generated files). Instead, it is ${JSON.stringify(pj.main)}
|
|
139
|
+
the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
107
140
|
}
|
|
108
141
|
if (pj.config) {
|
|
109
142
|
delete pj.config.forge;
|
|
@@ -111,59 +144,98 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
|
111
144
|
await fs_extra_1.default.writeJson(node_path_1.default.resolve(buildPath, 'package.json'), pj, { spaces: 2 });
|
|
112
145
|
};
|
|
113
146
|
// Main process, Preload scripts and Worker process, etc.
|
|
114
|
-
this.build = async () => {
|
|
115
|
-
const configs = await this.configGenerator.
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
//
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
147
|
+
this.build = async (task) => {
|
|
148
|
+
const configs = await this.configGenerator.getBuildConfigs();
|
|
149
|
+
const isRollupWatcher = (x) => x && typeof x === 'object' && 'on' in x && typeof x.on === 'function' && 'close' in x && typeof x.close === 'function';
|
|
150
|
+
return task?.newListr(configs.map((userConfig) => {
|
|
151
|
+
const target = (userConfig.build?.rollupOptions?.input || (typeof userConfig.build?.lib !== 'boolean' && userConfig.build?.lib?.entry)) ?? '';
|
|
152
|
+
return {
|
|
153
|
+
title: `Building ${chalk_1.default.green(target)} target`,
|
|
154
|
+
task: async (_ctx, subtask) => {
|
|
155
|
+
// We wrap this function in a Promise to ensure that the task is marked as completed
|
|
156
|
+
// only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
|
|
157
|
+
// rather than when the `vite.build` promise resolves.
|
|
158
|
+
await new Promise((resolve, reject) => {
|
|
159
|
+
vite_1.default
|
|
160
|
+
.build({
|
|
161
|
+
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
162
|
+
configFile: false,
|
|
163
|
+
logLevel: 'silent', // We suppress Vite output and instead log lines using RollupWatcher events
|
|
164
|
+
...userConfig,
|
|
165
|
+
plugins: [(0, plugins_1.onBuildDone)(resolve), ...(userConfig.plugins ?? [])],
|
|
166
|
+
clearScreen: false,
|
|
167
|
+
})
|
|
168
|
+
.then((result) => {
|
|
169
|
+
if (isRollupWatcher(result)) {
|
|
170
|
+
result.on('event', (event) => {
|
|
171
|
+
if (event.code === 'ERROR') {
|
|
172
|
+
console.error(`\n${this.timeFormatter.format(new Date())} ${event.error.message}`);
|
|
173
|
+
reject(event.error);
|
|
174
|
+
}
|
|
175
|
+
else if (event.code === 'BUNDLE_END') {
|
|
176
|
+
console.log(`${chalk_1.default.dim(this.timeFormatter.format(new Date()))} ${chalk_1.default.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk_1.default.green('target built')} ${chalk_1.default.dim(target)}`);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
this.watchers.push(result);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
subtask.title = `Built target ${chalk_1.default.dim(target)}`;
|
|
183
|
+
}
|
|
184
|
+
return result;
|
|
185
|
+
})
|
|
186
|
+
.catch(reject);
|
|
187
|
+
});
|
|
188
|
+
},
|
|
189
|
+
rendererOptions: {
|
|
190
|
+
persistentOutput: true,
|
|
191
|
+
},
|
|
192
|
+
exitOnError: true,
|
|
193
|
+
};
|
|
194
|
+
}), {
|
|
195
|
+
concurrent: true,
|
|
196
|
+
});
|
|
138
197
|
};
|
|
139
198
|
// Renderer process
|
|
140
|
-
this.buildRenderer = async () => {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
199
|
+
this.buildRenderer = async (task) => {
|
|
200
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
201
|
+
return task?.newListr(rendererConfigs.map((userConfig) => ({
|
|
202
|
+
task: async (_ctx, subtask) => {
|
|
203
|
+
await vite_1.default.build({
|
|
204
|
+
configFile: false,
|
|
205
|
+
logLevel: 'error',
|
|
206
|
+
...userConfig,
|
|
207
|
+
});
|
|
208
|
+
subtask.title = `Built target ${chalk_1.default.dim(node_path_1.default.basename(userConfig.build?.outDir ?? ''))}`;
|
|
209
|
+
},
|
|
210
|
+
})));
|
|
147
211
|
};
|
|
148
|
-
this.launchRendererDevServers = async () => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
|
|
212
|
+
this.launchRendererDevServers = async (task) => {
|
|
213
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
214
|
+
return task?.newListr(rendererConfigs.map((userConfig) => ({
|
|
215
|
+
title: `Target ${chalk_1.default.cyan(node_path_1.default.basename(userConfig.build?.outDir ?? ''))}`,
|
|
216
|
+
task: async (_ctx, subtask) => {
|
|
217
|
+
const viteDevServer = await vite_1.default.createServer({
|
|
218
|
+
configFile: false,
|
|
219
|
+
...userConfig,
|
|
220
|
+
});
|
|
221
|
+
await viteDevServer.listen();
|
|
222
|
+
const urls = getServerURLs(viteDevServer.resolvedUrls);
|
|
223
|
+
subtask.output = urls;
|
|
224
|
+
this.servers.push(viteDevServer);
|
|
225
|
+
if (viteDevServer.httpServer) {
|
|
226
|
+
// Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
|
|
227
|
+
const addressInfo = viteDevServer.httpServer.address();
|
|
228
|
+
const isAddressInfo = (x) => (typeof x === 'object' ? typeof x?.address === 'string' : false);
|
|
229
|
+
if (isAddressInfo(addressInfo)) {
|
|
230
|
+
userConfig.server ??= {};
|
|
231
|
+
userConfig.server.port = addressInfo.port;
|
|
232
|
+
}
|
|
164
233
|
}
|
|
165
|
-
}
|
|
166
|
-
|
|
234
|
+
},
|
|
235
|
+
rendererOptions: {
|
|
236
|
+
persistentOutput: true,
|
|
237
|
+
},
|
|
238
|
+
})));
|
|
167
239
|
};
|
|
168
240
|
this.exitHandler = (options, err) => {
|
|
169
241
|
d('handling process exit with:', options);
|
|
@@ -181,10 +253,8 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
|
181
253
|
}
|
|
182
254
|
if (err)
|
|
183
255
|
console.error(err.stack);
|
|
184
|
-
// Why: This is literally what the option says to do.
|
|
185
|
-
// eslint-disable-next-line no-process-exit
|
|
186
256
|
if (options.exit)
|
|
187
|
-
process.exit();
|
|
257
|
+
process.exit(0);
|
|
188
258
|
};
|
|
189
259
|
}
|
|
190
260
|
setDirectories(dir) {
|
|
@@ -198,4 +268,23 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
|
198
268
|
exports.VitePlugin = VitePlugin;
|
|
199
269
|
VitePlugin.alreadyStarted = false;
|
|
200
270
|
exports.default = VitePlugin;
|
|
201
|
-
|
|
271
|
+
/**
|
|
272
|
+
* Get a string for Vite's printServerUrls function without actually printing it.
|
|
273
|
+
* Allows us to set `task.output` to that value without having to pass a custom logger into Vite.
|
|
274
|
+
* @see https://github.com/vitejs/vite/blob/42233d39674be808a6a1a79f1a6e44ed23ba0d61/packages/vite/src/node/logger.ts#L168-L188
|
|
275
|
+
*/
|
|
276
|
+
function getServerURLs(urls) {
|
|
277
|
+
let output = '';
|
|
278
|
+
const colorUrl = (url) => chalk_1.default.cyan(url.replace(/:(\d+)\//, (_, port) => `:${chalk_1.default.bold(port)}/`));
|
|
279
|
+
for (const url of urls.local) {
|
|
280
|
+
output += ` ${chalk_1.default.green('➜')} ${chalk_1.default.bold('Local')}: ${colorUrl(url)}`;
|
|
281
|
+
}
|
|
282
|
+
for (const url of urls.network) {
|
|
283
|
+
output += ` \n${chalk_1.default.green('➜')} ${chalk_1.default.bold('Network')}: ${colorUrl(url)}`;
|
|
284
|
+
}
|
|
285
|
+
if (urls.network.length === 0) {
|
|
286
|
+
output += chalk_1.default.dim(` \n${chalk_1.default.green('➜')} ${chalk_1.default.bold('Network')}: use `) + chalk_1.default.bold('--host') + chalk_1.default.dim(' to expose');
|
|
287
|
+
}
|
|
288
|
+
return output;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhFQUE4RTtBQUM5RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQUU3QywwREFBNkI7QUFFN0IsNkRBQThFO0FBQzlFLGtEQUEwQjtBQUMxQixrREFBMEI7QUFDMUIsd0RBQTBCO0FBQzFCLG1DQUE2QztBQUM3QyxnREFBdUM7QUFFdkMsNENBQTZDO0FBQzdDLDhEQUErQztBQU0vQyxNQUFNLENBQUMsR0FBRyxJQUFBLGVBQUssRUFBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBRTlDLE1BQXFCLFVBQVcsU0FBUSx3QkFBNEI7SUFBcEU7O1FBR1MsU0FBSSxHQUFHLE1BQU0sQ0FBQztRQUViLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFjZixhQUFRLEdBQWdDLEVBQUUsQ0FBQztRQUUzQyxZQUFPLEdBQXlCLEVBQUUsQ0FBQztRQUUzQyxnREFBZ0Q7UUFDeEMsa0JBQWEsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO1lBQ3pELElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7WUFDakIsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsU0FBSSxHQUFHLENBQUMsR0FBVyxFQUFRLEVBQUU7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV6QixDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUM1QixPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsRUFBRSxDQUFD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/plugin-vite",
|
|
3
|
-
"version": "7.8.
|
|
3
|
+
"version": "7.8.2",
|
|
4
4
|
"description": "Vite plugin for Electron Forge, lets you use Vite directly in your tooling",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,10 +12,8 @@
|
|
|
12
12
|
"main": "dist/VitePlugin.js",
|
|
13
13
|
"typings": "dist/VitePlugin.d.ts",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@electron-forge/
|
|
16
|
-
"@electron-forge/
|
|
17
|
-
"@electron-forge/shared-types": "7.8.0",
|
|
18
|
-
"@electron-forge/web-multi-logger": "7.8.0",
|
|
15
|
+
"@electron-forge/plugin-base": "7.8.2",
|
|
16
|
+
"@electron-forge/shared-types": "7.8.2",
|
|
19
17
|
"chalk": "^4.0.0",
|
|
20
18
|
"debug": "^4.3.1",
|
|
21
19
|
"fs-extra": "^10.0.0",
|
|
@@ -26,7 +24,7 @@
|
|
|
26
24
|
"@malept/cross-spawn-promise": "^2.0.0",
|
|
27
25
|
"@types/node": "^18.0.3",
|
|
28
26
|
"vite": "^5.0.12",
|
|
29
|
-
"vitest": "^3.
|
|
27
|
+
"vitest": "^3.1.3",
|
|
30
28
|
"which": "^2.0.2",
|
|
31
29
|
"xvfb-maybe": "^0.2.1"
|
|
32
30
|
},
|
|
@@ -41,5 +39,5 @@
|
|
|
41
39
|
"src",
|
|
42
40
|
"forge-vite-env.d.ts"
|
|
43
41
|
],
|
|
44
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "b8bc79894f2aa410f037784b848fbd947ff53417"
|
|
45
43
|
}
|
package/src/ViteConfig.ts
CHANGED
|
@@ -51,7 +51,7 @@ export default class ViteConfigGenerator {
|
|
|
51
51
|
return this.isProd ? 'production' : 'development';
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
async
|
|
54
|
+
async getBuildConfigs(): Promise<UserConfig[]> {
|
|
55
55
|
if (!Array.isArray(this.pluginConfig.build)) {
|
|
56
56
|
throw new Error('"config.build" must be an Array');
|
|
57
57
|
}
|
package/src/VitePlugin.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
// TODO(erickzhao): Remove this when upgrading to Vite 6 and converting to ESM
|
|
2
|
+
process.env.VITE_CJS_IGNORE_WARNING = 'true';
|
|
3
|
+
|
|
1
4
|
import path from 'node:path';
|
|
2
5
|
|
|
3
6
|
import { namedHookWithTaskFn, PluginBase } from '@electron-forge/plugin-base';
|
|
4
7
|
import chalk from 'chalk';
|
|
5
8
|
import debug from 'debug';
|
|
6
9
|
import fs from 'fs-extra';
|
|
7
|
-
import { PRESET_TIMER } from 'listr2';
|
|
10
|
+
import { Listr, PRESET_TIMER } from 'listr2';
|
|
8
11
|
import { default as vite } from 'vite';
|
|
9
12
|
|
|
10
13
|
import { onBuildDone } from './util/plugins';
|
|
11
14
|
import ViteConfigGenerator from './ViteConfig';
|
|
12
15
|
|
|
13
16
|
import type { VitePluginConfig } from './Config';
|
|
14
|
-
import type { ForgeMultiHookMap, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
17
|
+
import type { ForgeListrTask, ForgeMultiHookMap, ResolvedForgeConfig } from '@electron-forge/shared-types';
|
|
15
18
|
import type { AddressInfo } from 'node:net';
|
|
16
|
-
// eslint-disable-next-line n/no-extraneous-import
|
|
17
|
-
import type { RollupWatcher } from 'rollup';
|
|
18
19
|
|
|
19
20
|
const d = debug('electron-forge:plugin:vite');
|
|
20
21
|
|
|
@@ -25,24 +26,39 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
25
26
|
|
|
26
27
|
private isProd = false;
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Path to the root of the Electron app
|
|
31
|
+
*/
|
|
29
32
|
private projectDir!: string;
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Path where Vite output is generated. Usually `${projectDir}/.vite`
|
|
36
|
+
*/
|
|
32
37
|
private baseDir!: string;
|
|
33
38
|
|
|
34
39
|
private configGeneratorCache!: ViteConfigGenerator;
|
|
35
40
|
|
|
36
|
-
private watchers: RollupWatcher[] = [];
|
|
41
|
+
private watchers: vite.Rollup.RollupWatcher[] = [];
|
|
37
42
|
|
|
38
43
|
private servers: vite.ViteDevServer[] = [];
|
|
39
44
|
|
|
45
|
+
// Matches the format of the default Vite logger
|
|
46
|
+
private timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
47
|
+
hour: 'numeric',
|
|
48
|
+
minute: 'numeric',
|
|
49
|
+
second: 'numeric',
|
|
50
|
+
});
|
|
51
|
+
|
|
40
52
|
init = (dir: string): void => {
|
|
41
53
|
this.setDirectories(dir);
|
|
42
54
|
|
|
43
55
|
d('hooking process events');
|
|
44
|
-
process.on('exit', (_code) =>
|
|
45
|
-
|
|
56
|
+
process.on('exit', (_code) => {
|
|
57
|
+
this.exitHandler({ cleanup: true });
|
|
58
|
+
});
|
|
59
|
+
process.on('SIGINT' as NodeJS.Signals, (_signal) => {
|
|
60
|
+
this.exitHandler({ exit: true });
|
|
61
|
+
});
|
|
46
62
|
};
|
|
47
63
|
|
|
48
64
|
public setDirectories(dir: string): void {
|
|
@@ -61,39 +77,66 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
61
77
|
if (VitePlugin.alreadyStarted) return;
|
|
62
78
|
VitePlugin.alreadyStarted = true;
|
|
63
79
|
|
|
80
|
+
d(`preStart: removing old content from ${this.baseDir}`);
|
|
64
81
|
await fs.remove(this.baseDir);
|
|
65
82
|
|
|
66
|
-
return task?.newListr(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
title: 'Compiling main process code',
|
|
80
|
-
task: async () => {
|
|
81
|
-
await this.build();
|
|
83
|
+
return task?.newListr(
|
|
84
|
+
[
|
|
85
|
+
{
|
|
86
|
+
title: 'Launching Vite dev servers for renderer process code...',
|
|
87
|
+
task: async (_ctx, task) => {
|
|
88
|
+
const result = await this.launchRendererDevServers(task);
|
|
89
|
+
task.title = 'Launched Vite dev servers for renderer process code';
|
|
90
|
+
return result;
|
|
91
|
+
},
|
|
92
|
+
rendererOptions: {
|
|
93
|
+
persistentOutput: true,
|
|
94
|
+
timer: { ...PRESET_TIMER },
|
|
95
|
+
},
|
|
82
96
|
},
|
|
83
|
-
|
|
84
|
-
|
|
97
|
+
// The main process depends on the `server.port` of the renderer process, so the renderer process is run first.
|
|
98
|
+
{
|
|
99
|
+
title: 'Building main process and preload bundles...',
|
|
100
|
+
task: async (_ctx, task) => {
|
|
101
|
+
const result = await this.build(task);
|
|
102
|
+
task.title = 'Built main process and preload bundles';
|
|
103
|
+
return result;
|
|
104
|
+
},
|
|
105
|
+
rendererOptions: {
|
|
106
|
+
persistentOutput: true,
|
|
107
|
+
timer: { ...PRESET_TIMER },
|
|
108
|
+
},
|
|
85
109
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
110
|
+
],
|
|
111
|
+
{ concurrent: false }
|
|
112
|
+
);
|
|
113
|
+
}, 'Preparing Vite bundles'),
|
|
89
114
|
],
|
|
90
115
|
prePackage: [
|
|
91
|
-
namedHookWithTaskFn<'prePackage'>(async () => {
|
|
116
|
+
namedHookWithTaskFn<'prePackage'>(async (task) => {
|
|
92
117
|
this.isProd = true;
|
|
93
118
|
await fs.remove(this.baseDir);
|
|
94
119
|
|
|
95
|
-
|
|
96
|
-
|
|
120
|
+
return task?.newListr(
|
|
121
|
+
[
|
|
122
|
+
{
|
|
123
|
+
title: 'Building main and preload targets...',
|
|
124
|
+
task: async (_ctx, subtask) => {
|
|
125
|
+
const results = await this.build(subtask);
|
|
126
|
+
return results;
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
title: 'Building renderer targets...',
|
|
131
|
+
task: async (_ctx, subtask) => {
|
|
132
|
+
const results = await this.buildRenderer(subtask);
|
|
133
|
+
return results;
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
{ concurrent: true }
|
|
138
|
+
);
|
|
139
|
+
}, 'Building production Vite bundles'),
|
|
97
140
|
],
|
|
98
141
|
postStart: async (_config, child) => {
|
|
99
142
|
d('hooking electron process exit');
|
|
@@ -139,7 +182,7 @@ Your packaged app may be larger than expected if you dont ignore everything othe
|
|
|
139
182
|
if (!pj.main?.includes('.vite/')) {
|
|
140
183
|
throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
|
|
141
184
|
"main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
|
|
142
|
-
the generated files). Instead, it is ${JSON.stringify(pj.main)}
|
|
185
|
+
the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
143
186
|
}
|
|
144
187
|
|
|
145
188
|
if (pj.config) {
|
|
@@ -150,69 +193,115 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
|
150
193
|
};
|
|
151
194
|
|
|
152
195
|
// Main process, Preload scripts and Worker process, etc.
|
|
153
|
-
build = async (): Promise<void> => {
|
|
154
|
-
const configs = await this.configGenerator.
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
196
|
+
build = async (task?: ForgeListrTask<null>): Promise<Listr | void> => {
|
|
197
|
+
const configs = await this.configGenerator.getBuildConfigs();
|
|
198
|
+
const isRollupWatcher = (x: vite.Rollup.RollupWatcher | vite.Rollup.RollupOutput | vite.Rollup.RollupOutput[]): x is vite.Rollup.RollupWatcher =>
|
|
199
|
+
x && typeof x === 'object' && 'on' in x && typeof x.on === 'function' && 'close' in x && typeof x.close === 'function';
|
|
200
|
+
|
|
201
|
+
return task?.newListr(
|
|
202
|
+
configs.map((userConfig) => {
|
|
203
|
+
const target = (userConfig.build?.rollupOptions?.input || (typeof userConfig.build?.lib !== 'boolean' && userConfig.build?.lib?.entry)) ?? '';
|
|
204
|
+
return {
|
|
205
|
+
title: `Building ${chalk.green(target)} target`,
|
|
206
|
+
task: async (_ctx, subtask) => {
|
|
207
|
+
// We wrap this function in a Promise to ensure that the task is marked as completed
|
|
208
|
+
// only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
|
|
209
|
+
// rather than when the `vite.build` promise resolves.
|
|
210
|
+
await new Promise<void>((resolve, reject) => {
|
|
211
|
+
vite
|
|
212
|
+
.build({
|
|
213
|
+
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
214
|
+
configFile: false,
|
|
215
|
+
logLevel: 'silent', // We suppress Vite output and instead log lines using RollupWatcher events
|
|
216
|
+
...userConfig,
|
|
217
|
+
plugins: [onBuildDone(resolve), ...(userConfig.plugins ?? [])],
|
|
218
|
+
clearScreen: false,
|
|
219
|
+
})
|
|
220
|
+
.then((result) => {
|
|
221
|
+
if (isRollupWatcher(result)) {
|
|
222
|
+
result.on('event', (event) => {
|
|
223
|
+
if (event.code === 'ERROR') {
|
|
224
|
+
console.error(`\n${this.timeFormatter.format(new Date())} ${event.error.message}`);
|
|
225
|
+
reject(event.error);
|
|
226
|
+
} else if (event.code === 'BUNDLE_END') {
|
|
227
|
+
console.log(
|
|
228
|
+
`${chalk.dim(this.timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green(
|
|
229
|
+
'target built'
|
|
230
|
+
)} ${chalk.dim(target)}`
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
this.watchers.push(result);
|
|
235
|
+
} else {
|
|
236
|
+
subtask.title = `Built target ${chalk.dim(target)}`;
|
|
237
|
+
}
|
|
238
|
+
return result;
|
|
239
|
+
})
|
|
240
|
+
.catch(reject);
|
|
241
|
+
});
|
|
242
|
+
},
|
|
243
|
+
rendererOptions: {
|
|
244
|
+
persistentOutput: true,
|
|
245
|
+
},
|
|
246
|
+
exitOnError: true,
|
|
247
|
+
};
|
|
248
|
+
}),
|
|
249
|
+
{
|
|
250
|
+
concurrent: true,
|
|
251
|
+
}
|
|
252
|
+
);
|
|
181
253
|
};
|
|
182
254
|
|
|
183
255
|
// Renderer process
|
|
184
|
-
buildRenderer = async (
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
256
|
+
buildRenderer = async (task?: ForgeListrTask<null>) => {
|
|
257
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
258
|
+
return task?.newListr(
|
|
259
|
+
rendererConfigs.map((userConfig) => ({
|
|
260
|
+
task: async (_ctx, subtask) => {
|
|
261
|
+
await vite.build({
|
|
262
|
+
configFile: false,
|
|
263
|
+
logLevel: 'error',
|
|
264
|
+
...userConfig,
|
|
265
|
+
});
|
|
266
|
+
subtask.title = `Built target ${chalk.dim(path.basename(userConfig.build?.outDir ?? ''))}`;
|
|
267
|
+
},
|
|
268
|
+
}))
|
|
269
|
+
);
|
|
191
270
|
};
|
|
192
271
|
|
|
193
|
-
launchRendererDevServers = async (
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
272
|
+
launchRendererDevServers = async (task?: ForgeListrTask<null>) => {
|
|
273
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
274
|
+
return task?.newListr(
|
|
275
|
+
rendererConfigs.map((userConfig) => ({
|
|
276
|
+
title: `Target ${chalk.cyan(path.basename(userConfig.build?.outDir ?? ''))}`,
|
|
277
|
+
task: async (_ctx, subtask) => {
|
|
278
|
+
const viteDevServer = await vite.createServer({
|
|
279
|
+
configFile: false,
|
|
280
|
+
...userConfig,
|
|
281
|
+
});
|
|
199
282
|
|
|
200
|
-
|
|
201
|
-
|
|
283
|
+
await viteDevServer.listen();
|
|
284
|
+
const urls = getServerURLs(viteDevServer.resolvedUrls!);
|
|
285
|
+
subtask.output = urls;
|
|
202
286
|
|
|
203
|
-
|
|
287
|
+
this.servers.push(viteDevServer);
|
|
204
288
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
289
|
+
if (viteDevServer.httpServer) {
|
|
290
|
+
// Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
|
|
291
|
+
const addressInfo = viteDevServer.httpServer.address();
|
|
292
|
+
const isAddressInfo = (x: AddressInfo | string | null): x is AddressInfo => (typeof x === 'object' ? typeof x?.address === 'string' : false);
|
|
209
293
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
294
|
+
if (isAddressInfo(addressInfo)) {
|
|
295
|
+
userConfig.server ??= {};
|
|
296
|
+
userConfig.server.port = addressInfo.port;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
},
|
|
300
|
+
rendererOptions: {
|
|
301
|
+
persistentOutput: true,
|
|
302
|
+
},
|
|
303
|
+
}))
|
|
304
|
+
);
|
|
216
305
|
};
|
|
217
306
|
|
|
218
307
|
exitHandler = (options: { cleanup?: boolean; exit?: boolean }, err?: Error): void => {
|
|
@@ -231,10 +320,29 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
|
231
320
|
this.servers = [];
|
|
232
321
|
}
|
|
233
322
|
if (err) console.error(err.stack);
|
|
234
|
-
|
|
235
|
-
// eslint-disable-next-line no-process-exit
|
|
236
|
-
if (options.exit) process.exit();
|
|
323
|
+
if (options.exit) process.exit(0);
|
|
237
324
|
};
|
|
238
325
|
}
|
|
239
326
|
|
|
327
|
+
/**
|
|
328
|
+
* Get a string for Vite's printServerUrls function without actually printing it.
|
|
329
|
+
* Allows us to set `task.output` to that value without having to pass a custom logger into Vite.
|
|
330
|
+
* @see https://github.com/vitejs/vite/blob/42233d39674be808a6a1a79f1a6e44ed23ba0d61/packages/vite/src/node/logger.ts#L168-L188
|
|
331
|
+
*/
|
|
332
|
+
function getServerURLs(urls: vite.ResolvedServerUrls) {
|
|
333
|
+
let output = '';
|
|
334
|
+
const colorUrl = (url: string) => chalk.cyan(url.replace(/:(\d+)\//, (_, port) => `:${chalk.bold(port)}/`));
|
|
335
|
+
for (const url of urls.local) {
|
|
336
|
+
output += ` ${chalk.green('➜')} ${chalk.bold('Local')}: ${colorUrl(url)}`;
|
|
337
|
+
}
|
|
338
|
+
for (const url of urls.network) {
|
|
339
|
+
output += ` \n${chalk.green('➜')} ${chalk.bold('Network')}: ${colorUrl(url)}`;
|
|
340
|
+
}
|
|
341
|
+
if (urls.network.length === 0) {
|
|
342
|
+
output += chalk.dim(` \n${chalk.green('➜')} ${chalk.bold('Network')}: use `) + chalk.bold('--host') + chalk.dim(' to expose');
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return output;
|
|
346
|
+
}
|
|
347
|
+
|
|
240
348
|
export { VitePlugin };
|