@electron-forge/plugin-vite 8.0.0-alpha.6 → 8.0.0-alpha.8
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/VitePlugin.d.ts +1 -2
- package/dist/VitePlugin.d.ts.map +1 -1
- package/dist/VitePlugin.js +76 -115
- package/dist/config/vite.base.config.d.ts +1 -1
- package/dist/config/vite.base.config.d.ts.map +1 -1
- package/dist/config/vite.base.config.js +4 -5
- package/dist/config/vite.preload.config.js +3 -3
- package/dist/subprocess-worker.js +94 -8
- package/package.json +13 -10
- package/src/VitePlugin.ts +96 -135
- package/src/config/vite.base.config.ts +3 -5
- package/src/config/vite.preload.config.ts +2 -2
- package/src/subprocess-worker.ts +107 -7
package/dist/VitePlugin.d.ts
CHANGED
|
@@ -15,9 +15,8 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
15
15
|
*/
|
|
16
16
|
private baseDir;
|
|
17
17
|
private configGeneratorCache;
|
|
18
|
-
private
|
|
18
|
+
private watchChildren;
|
|
19
19
|
private servers;
|
|
20
|
-
private timeFormatter;
|
|
21
20
|
init: (dir: string) => void;
|
|
22
21
|
setDirectories(dir: string): void;
|
|
23
22
|
private get configGenerator();
|
package/dist/VitePlugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VitePlugin.d.ts","sourceRoot":"","sources":["../src/VitePlugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9E,OAAO,EAAE,KAAK,EAAgB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"VitePlugin.d.ts","sourceRoot":"","sources":["../src/VitePlugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAI9E,OAAO,EAAE,KAAK,EAAgB,MAAM,QAAQ,CAAC;AAM7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,8BAA8B,CAAC;AAsItC,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,aAAa,CAAsB;IAE3C,OAAO,CAAC,OAAO,CAA4B;IAE3C,IAAI,GAAI,KAAK,MAAM,KAAG,IAAI,CAUxB;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC,OAAO,KAAK,eAAe,GAM1B;IAED,QAAQ,QAAO,iBAAiB,CAgF9B;IAEF,kBAAkB,GAChB,aAAa,mBAAmB,KAC/B,OAAO,CAAC,mBAAmB,CAAC,CAwB7B;IAEF,gBAAgB,GACd,cAAc,mBAAmB,EACjC,WAAW,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CAgBd;IAEF;;;;OAIG;IACH,OAAO,KAAK,kBAAkB,GAQ7B;IAGD,KAAK,GAAU,OAAO,cAAc,CAAC,IAAI,CAAC,KAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAkDhE;IAGF,aAAa,GAAU,OAAO,cAAc,CAAC,IAAI,CAAC,gDAyChD;IAEF,wBAAwB,GAAU,OAAO,cAAc,CAAC,IAAI,CAAC,gDAoC3D;IAEF,WAAW,GACT,SAAS;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,EAC9C,MAAM,KAAK,KACV,IAAI,CAiBL;CACH;AA2BD,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/VitePlugin.js
CHANGED
|
@@ -6,6 +6,7 @@ import debug from 'debug';
|
|
|
6
6
|
import fs from 'fs-extra';
|
|
7
7
|
import { PRESET_TIMER } from 'listr2';
|
|
8
8
|
import * as vite from 'vite';
|
|
9
|
+
import { viteDevServerUrls } from './config/vite.base.config.js';
|
|
9
10
|
import ViteConfigGenerator from './ViteConfig.js';
|
|
10
11
|
const d = debug('electron-forge:plugin:vite');
|
|
11
12
|
const subprocessWorkerPath = path.resolve(import.meta.dirname, 'subprocess-worker.js');
|
|
@@ -47,6 +48,59 @@ function spawnViteBuild(pluginConfig, kind, index, projectDir) {
|
|
|
47
48
|
});
|
|
48
49
|
});
|
|
49
50
|
}
|
|
51
|
+
function spawnViteBuildWatch(pluginConfig, index, projectDir, devServerUrls, onReloadRenderers) {
|
|
52
|
+
const child = spawn(process.execPath, [subprocessWorkerPath], {
|
|
53
|
+
cwd: projectDir,
|
|
54
|
+
env: {
|
|
55
|
+
...process.env,
|
|
56
|
+
FORGE_VITE_PROJECT_DIR: projectDir,
|
|
57
|
+
FORGE_VITE_KIND: 'build',
|
|
58
|
+
FORGE_VITE_INDEX: String(index),
|
|
59
|
+
FORGE_VITE_CONFIG: JSON.stringify(pluginConfig),
|
|
60
|
+
FORGE_VITE_WATCH: '1',
|
|
61
|
+
FORGE_VITE_DEV_SERVER_URLS: JSON.stringify(devServerUrls),
|
|
62
|
+
},
|
|
63
|
+
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
|
64
|
+
});
|
|
65
|
+
let settled = false;
|
|
66
|
+
let stderr = '';
|
|
67
|
+
child.stderr.setEncoding('utf8');
|
|
68
|
+
child.stderr.on('data', (chunk) => {
|
|
69
|
+
if (!settled)
|
|
70
|
+
stderr += chunk;
|
|
71
|
+
process.stderr.write(chunk);
|
|
72
|
+
});
|
|
73
|
+
child.stdout.setEncoding('utf8');
|
|
74
|
+
child.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
75
|
+
const firstBuild = new Promise((resolve, reject) => {
|
|
76
|
+
const settle = (fn) => {
|
|
77
|
+
if (settled)
|
|
78
|
+
return;
|
|
79
|
+
settled = true;
|
|
80
|
+
stderr = '';
|
|
81
|
+
fn();
|
|
82
|
+
};
|
|
83
|
+
child.on('message', (msg) => {
|
|
84
|
+
if (msg.type === 'first-build-done') {
|
|
85
|
+
settle(resolve);
|
|
86
|
+
}
|
|
87
|
+
else if (msg.type === 'first-build-error') {
|
|
88
|
+
settle(() => reject(new Error(msg.message)));
|
|
89
|
+
}
|
|
90
|
+
else if (msg.type === 'reload-renderers') {
|
|
91
|
+
onReloadRenderers();
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
child.on('error', (err) => settle(() => reject(err)));
|
|
95
|
+
child.on('close', (code, signal) => {
|
|
96
|
+
const reason = signal
|
|
97
|
+
? `killed by signal ${signal}`
|
|
98
|
+
: `exited with code ${code}`;
|
|
99
|
+
settle(() => reject(new Error(`Vite watch subprocess ${reason} before first build completed${stderr ? `:\n${stderr}` : ''}`)));
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
return { child, firstBuild };
|
|
103
|
+
}
|
|
50
104
|
function entryToDisplay(entry) {
|
|
51
105
|
if (typeof entry === 'string')
|
|
52
106
|
return entry;
|
|
@@ -67,14 +121,8 @@ export default class VitePlugin extends PluginBase {
|
|
|
67
121
|
*/
|
|
68
122
|
baseDir;
|
|
69
123
|
configGeneratorCache;
|
|
70
|
-
|
|
124
|
+
watchChildren = [];
|
|
71
125
|
servers = [];
|
|
72
|
-
// Matches the format of the default Vite logger
|
|
73
|
-
timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
74
|
-
hour: 'numeric',
|
|
75
|
-
minute: 'numeric',
|
|
76
|
-
second: 'numeric',
|
|
77
|
-
});
|
|
78
126
|
init = (dir) => {
|
|
79
127
|
this.setDirectories(dir);
|
|
80
128
|
d('hooking process events');
|
|
@@ -212,10 +260,10 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
212
260
|
}
|
|
213
261
|
// Main process, Preload scripts and Worker process, etc.
|
|
214
262
|
build = async (task) => {
|
|
263
|
+
const targets = this.config.build
|
|
264
|
+
.map((spec, index) => ({ spec, index }))
|
|
265
|
+
.filter(({ spec }) => spec.config);
|
|
215
266
|
if (this.isProd) {
|
|
216
|
-
const targets = this.config.build
|
|
217
|
-
.map((spec, index) => ({ spec, index }))
|
|
218
|
-
.filter(({ spec }) => spec.config);
|
|
219
267
|
return task?.newListr(targets.map(({ spec, index }) => ({
|
|
220
268
|
title: `Building ${chalk.green(entryToDisplay(spec.entry))}`,
|
|
221
269
|
task: async (_ctx, subtask) => {
|
|
@@ -227,107 +275,20 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
227
275
|
exitOnError: true,
|
|
228
276
|
});
|
|
229
277
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
* Rollup's `input` can be a string, an array of strings, or an object.
|
|
243
|
-
* This function converts the input to a string for the Forge CLI to consume.
|
|
244
|
-
*
|
|
245
|
-
* @see https://rollupjs.org/configuration-options/#input
|
|
246
|
-
*/
|
|
247
|
-
const parseInputOptionToString = (input) => {
|
|
248
|
-
if (typeof input === 'string') {
|
|
249
|
-
return input;
|
|
250
|
-
}
|
|
251
|
-
else if (Array.isArray(input)) {
|
|
252
|
-
return input.join(' ');
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
return Object.keys(input).join(' ');
|
|
256
|
-
}
|
|
257
|
-
};
|
|
258
|
-
return task?.newListr(configs.map((userConfig) => {
|
|
259
|
-
let target = '';
|
|
260
|
-
const input = userConfig.build?.rollupOptions?.input;
|
|
261
|
-
if (input) {
|
|
262
|
-
target = parseInputOptionToString(input);
|
|
263
|
-
}
|
|
264
|
-
else if (typeof userConfig.build?.lib !== 'boolean' &&
|
|
265
|
-
userConfig.build?.lib?.entry) {
|
|
266
|
-
target = parseInputOptionToString(userConfig.build.lib.entry);
|
|
267
|
-
}
|
|
268
|
-
return {
|
|
269
|
-
title: `Building ${chalk.green(target)} target`,
|
|
270
|
-
task: async (_ctx, subtask) => {
|
|
271
|
-
// We wrap this function in a Promise to ensure that the task is marked as completed
|
|
272
|
-
// only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
|
|
273
|
-
// rather than when the `vite.build` promise resolves.
|
|
274
|
-
await new Promise((resolve, reject) => {
|
|
275
|
-
vite
|
|
276
|
-
.build({
|
|
277
|
-
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
278
|
-
configFile: false,
|
|
279
|
-
// We suppress Vite output and instead log lines using RollupWatcher events
|
|
280
|
-
logLevel: 'silent',
|
|
281
|
-
...userConfig,
|
|
282
|
-
plugins: [
|
|
283
|
-
// This plugin controls the output of the first-time Vite build that happens.
|
|
284
|
-
// `buildEnd` and `closeBundle` are Rollup output generation hooks.
|
|
285
|
-
// See https://rollupjs.org/plugin-development/#output-generation-hooks
|
|
286
|
-
{
|
|
287
|
-
name: '@electron-forge/plugin-vite:build-done',
|
|
288
|
-
buildEnd(err) {
|
|
289
|
-
if (err instanceof Error) {
|
|
290
|
-
d('buildEnd rollup hook called with error so build failed');
|
|
291
|
-
reject(err);
|
|
292
|
-
}
|
|
293
|
-
},
|
|
294
|
-
closeBundle() {
|
|
295
|
-
d('no error in buildEnd and reached closeBundle so build succeeded');
|
|
296
|
-
resolve();
|
|
297
|
-
},
|
|
298
|
-
},
|
|
299
|
-
...(userConfig.plugins ?? []),
|
|
300
|
-
],
|
|
301
|
-
clearScreen: false,
|
|
302
|
-
})
|
|
303
|
-
.then((result) => {
|
|
304
|
-
// When running `start` and enabling watch mode in Vite, the Rollup watcher
|
|
305
|
-
// emits events for subsequent builds.
|
|
306
|
-
if (isRollupWatcher(result)) {
|
|
307
|
-
result.on('event', (event) => {
|
|
308
|
-
if (event.code === 'ERROR' &&
|
|
309
|
-
userConfig.logLevel !== 'silent') {
|
|
310
|
-
console.error(`\n${chalk.dim(this.timeFormatter.format(new Date()))} ${event.error.message}`);
|
|
311
|
-
}
|
|
312
|
-
else if (event.code === 'BUNDLE_END' &&
|
|
313
|
-
(!userConfig.logLevel || userConfig.logLevel === 'info')) {
|
|
314
|
-
console.log(`${chalk.dim(this.timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green('target built')} ${chalk.dim(target)}`);
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
|
-
this.watchers.push(result);
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
subtask.title = `Built target ${chalk.dim(target)}`;
|
|
321
|
-
}
|
|
322
|
-
return result;
|
|
323
|
-
})
|
|
324
|
-
.catch(reject);
|
|
325
|
-
});
|
|
326
|
-
},
|
|
327
|
-
};
|
|
328
|
-
}), {
|
|
278
|
+
return task?.newListr(targets.map(({ spec, index }) => ({
|
|
279
|
+
title: `Building ${chalk.green(entryToDisplay(spec.entry))} target`,
|
|
280
|
+
task: async () => {
|
|
281
|
+
const { child, firstBuild } = spawnViteBuildWatch(this.serializableConfig, index, this.projectDir, viteDevServerUrls, () => {
|
|
282
|
+
for (const server of this.servers) {
|
|
283
|
+
server.ws.send({ type: 'full-reload' });
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
this.watchChildren.push(child);
|
|
287
|
+
await firstBuild;
|
|
288
|
+
},
|
|
289
|
+
})), {
|
|
329
290
|
concurrent: this.config.concurrent ?? true,
|
|
330
|
-
exitOnError:
|
|
291
|
+
exitOnError: false,
|
|
331
292
|
});
|
|
332
293
|
};
|
|
333
294
|
// Renderer process
|
|
@@ -392,11 +353,11 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
392
353
|
exitHandler = (options, err) => {
|
|
393
354
|
d('handling process exit with:', options);
|
|
394
355
|
if (options.cleanup) {
|
|
395
|
-
for (const
|
|
396
|
-
d('
|
|
397
|
-
|
|
356
|
+
for (const child of this.watchChildren) {
|
|
357
|
+
d('killing vite watch subprocess');
|
|
358
|
+
child.kill();
|
|
398
359
|
}
|
|
399
|
-
this.
|
|
360
|
+
this.watchChildren = [];
|
|
400
361
|
for (const server of this.servers) {
|
|
401
362
|
d('cleaning http server');
|
|
402
363
|
server.close();
|
|
@@ -432,4 +393,4 @@ function getServerURLs(urls) {
|
|
|
432
393
|
return output;
|
|
433
394
|
}
|
|
434
395
|
export { VitePlugin };
|
|
435
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxtQkFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQVdsRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNuQixzQkFBc0IsQ0FDdkIsQ0FBQztBQUVGLFNBQVMsY0FBYyxDQUNyQixZQUEwRCxFQUMxRCxJQUEwQixFQUMxQixLQUFhLEVBQ2IsVUFBa0I7SUFFbEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDNUQsR0FBRyxFQUFFLFVBQVU7WUFDZixHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztnQkFDZCxzQkFBc0IsRUFBRSxVQUFVO2dCQUNsQyxlQUFlLEVBQUUsSUFBSTtnQkFDckIsZ0JBQWdCLEVBQUUs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
|
|
396
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxtQkFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQVlsRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNuQixzQkFBc0IsQ0FDdkIsQ0FBQztBQUVGLFNBQVMsY0FBYyxDQUNyQixZQUEwRCxFQUMxRCxJQUEwQixFQUMxQixLQUFhLEVBQ2IsVUFBa0I7SUFFbEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDNUQsR0FBRyxFQUFFLFVBQVU7WUFDZixHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztnQkFDZCxzQkFBc0IsRUFBRSxV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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ConfigEnv, Plugin, UserConfig } from 'vite';
|
|
2
|
-
export declare const builtins: string[];
|
|
3
2
|
export declare const external: string[];
|
|
3
|
+
export declare const viteDevServerUrls: Record<string, string>;
|
|
4
4
|
export declare function getBuildConfig(env: ConfigEnv<'build'>): UserConfig;
|
|
5
5
|
export declare function getDefineKeys(names: string[]): {
|
|
6
6
|
[name: string]: VitePluginRuntimeKeys;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.base.config.d.ts","sourceRoot":"","sources":["../../src/config/vite.base.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAiB,MAAM,MAAM,CAAC;AAEzE,eAAO,MAAM,QAAQ,UAIpB,CAAC;
|
|
1
|
+
{"version":3,"file":"vite.base.config.d.ts","sourceRoot":"","sources":["../../src/config/vite.base.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAiB,MAAM,MAAM,CAAC;AAEzE,eAAO,MAAM,QAAQ,UAIpB,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAE5D,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,UAAU,CAgBlE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;;EAe5C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC,uBAsBrD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,CAiBtE"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { builtinModules } from 'node:module';
|
|
2
|
-
export const
|
|
2
|
+
export const external = [
|
|
3
3
|
'electron',
|
|
4
4
|
'electron/common',
|
|
5
5
|
...builtinModules.map((m) => [m, `node:${m}`]).flat(),
|
|
6
6
|
];
|
|
7
|
-
export const external = [...builtins];
|
|
8
7
|
// Used for hot reload after preload scripts.
|
|
9
8
|
const viteDevServers = {};
|
|
10
|
-
const viteDevServerUrls = {};
|
|
9
|
+
export const viteDevServerUrls = {};
|
|
11
10
|
export function getBuildConfig(env) {
|
|
12
11
|
const { root, mode, command } = env;
|
|
13
12
|
return {
|
|
@@ -18,7 +17,7 @@ export function getBuildConfig(env) {
|
|
|
18
17
|
emptyOutDir: false,
|
|
19
18
|
// 🚧 Multiple builds may conflict.
|
|
20
19
|
outDir: '.vite/build',
|
|
21
|
-
watch: command === 'serve' ? {} : null,
|
|
20
|
+
watch: command === 'serve' ? { exclude: '**/.git/**' } : null,
|
|
22
21
|
minify: command === 'build',
|
|
23
22
|
},
|
|
24
23
|
clearScreen: false,
|
|
@@ -90,4 +89,4 @@ export function pluginHotRestart(command) {
|
|
|
90
89
|
},
|
|
91
90
|
};
|
|
92
91
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5iYXNlLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvdml0ZS5iYXNlLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzdDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixVQUFVO0lBQ1YsaUJBQWlCO0lBQ2pCLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQ3RELENBQUM7QUFFRiw2Q0FBNkM7QUFDN0MsTUFBTSxjQUFjLEdBQWtDLEVBQUUsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBMkIsRUFBRSxDQUFDO0FBRTVELE1BQU0sVUFBVSxjQUFjLENBQUMsR0FBdUI7SUFDcEQsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBRXBDLE9BQU87UUFDTCxJQUFJO1FBQ0osSUFBSTtRQUNKLEtBQUssRUFBRTtZQUNMLDREQUE0RDtZQUM1RCxXQUFXLEVBQUUsS0FBSztZQUNsQixtQ0FBbUM7WUFDbkMsTUFBTSxFQUFFLGFBQWE7WUFDckIsS0FBSyxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQzdELE1BQU0sRUFBRSxPQUFPLEtBQUssT0FBTztTQUM1QjtRQUNELFdBQVcsRUFBRSxLQUFLO0tBQ25CLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFlO0lBQzNDLE1BQU0sTUFBTSxHQUE4QyxFQUFFLENBQUM7SUFFN0QsbUZBQW1GO0lBQ25GLGdGQUFnRjtJ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
|
|
@@ -11,8 +11,8 @@ export function getConfig(forgeEnv, userConfig = {}) {
|
|
|
11
11
|
input: forgeConfigSelf.entry,
|
|
12
12
|
output: {
|
|
13
13
|
format: 'cjs',
|
|
14
|
-
//
|
|
15
|
-
|
|
14
|
+
// Preload scripts require a single entrypoint.
|
|
15
|
+
codeSplitting: false,
|
|
16
16
|
entryFileNames: '[name].js',
|
|
17
17
|
chunkFileNames: '[name].js',
|
|
18
18
|
assetFileNames: '[name].[ext]',
|
|
@@ -24,4 +24,4 @@ export function getConfig(forgeEnv, userConfig = {}) {
|
|
|
24
24
|
const buildConfig = getBuildConfig(forgeEnv);
|
|
25
25
|
return mergeConfig(mergeConfig(buildConfig, config), userConfig);
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml0ZS5wcmVsb2FkLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvdml0ZS5wcmVsb2FkLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLFdBQVcsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFFcEUsT0FBTyxFQUNMLFFBQVEsRUFDUixjQUFjLEVBQ2QsZ0JBQWdCLEdBQ2pCLE1BQU0sdUJBQXVCLENBQUM7QUFFL0IsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsUUFBNEIsRUFDNUIsYUFBeUIsRUFBRTtJQUUzQixNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ3JDLE1BQU0sTUFBTSxHQUFlO1FBQ3pCLEtBQUssRUFBRTtZQUNMLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxtQkFBbUIsQ0FBQztnQkFDNUMsNEdBQTRHO2dCQUM1RyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUs7Z0JBQzVCLE1BQU0sRUFBRTtvQkFDTixNQUFNLEVBQUUsS0FBSztvQkFDYiwrQ0FBK0M7b0JBQy9DLGFBQWEsRUFBRSxLQUFLO29CQUNwQixjQUFjLEVBQUUsV0FBVztvQkFDM0IsY0FBYyxFQUFFLFdBQVc7b0JBQzNCLGNBQWMsRUFBRSxjQUFjO2lCQUMvQjthQUNGO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN0QyxDQUFDO0lBQ0YsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkUsQ0FBQyJ9
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { build } from 'vite';
|
|
3
|
+
import { viteDevServerUrls } from './config/vite.base.config.js';
|
|
2
4
|
import ViteConfigGenerator from './ViteConfig.js';
|
|
3
5
|
const projectDir = process.env.FORGE_VITE_PROJECT_DIR;
|
|
4
6
|
const kind = process.env.FORGE_VITE_KIND;
|
|
5
7
|
const index = Number(process.env.FORGE_VITE_INDEX);
|
|
6
8
|
const rawConfig = process.env.FORGE_VITE_CONFIG;
|
|
9
|
+
const watch = process.env.FORGE_VITE_WATCH === '1';
|
|
10
|
+
const rawDevServerUrls = process.env.FORGE_VITE_DEV_SERVER_URLS;
|
|
7
11
|
if (!projectDir || !kind || !rawConfig || !Number.isInteger(index)) {
|
|
8
12
|
console.error('subprocess-worker: missing one of FORGE_VITE_PROJECT_DIR, FORGE_VITE_KIND, FORGE_VITE_INDEX, FORGE_VITE_CONFIG');
|
|
9
13
|
process.exit(1);
|
|
@@ -12,7 +16,7 @@ if (!projectDir || !kind || !rawConfig || !Number.isInteger(index)) {
|
|
|
12
16
|
// getBuildDefine() reads forgeConfig.renderer to generate ${NAME}_VITE_NAME
|
|
13
17
|
// defines when building main targets.
|
|
14
18
|
const pluginConfig = JSON.parse(rawConfig);
|
|
15
|
-
const generator = new ViteConfigGenerator(pluginConfig, projectDir,
|
|
19
|
+
const generator = new ViteConfigGenerator(pluginConfig, projectDir, !watch);
|
|
16
20
|
let spec;
|
|
17
21
|
let target;
|
|
18
22
|
if (kind === 'build') {
|
|
@@ -23,11 +27,93 @@ else {
|
|
|
23
27
|
spec = pluginConfig.renderer[index];
|
|
24
28
|
target = 'renderer';
|
|
25
29
|
}
|
|
30
|
+
// Seed the module-level URL map so getBuildDefine() produces the same
|
|
31
|
+
// *_VITE_DEV_SERVER_URL defines the in-process path would have.
|
|
32
|
+
if (rawDevServerUrls) {
|
|
33
|
+
Object.assign(viteDevServerUrls, JSON.parse(rawDevServerUrls));
|
|
34
|
+
}
|
|
26
35
|
const resolved = await generator.resolveConfig(spec, target);
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
if (!watch) {
|
|
37
|
+
await build({
|
|
38
|
+
configFile: false,
|
|
39
|
+
logLevel: 'error',
|
|
40
|
+
...resolved,
|
|
41
|
+
clearScreen: false,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Matches the format of the default Vite logger
|
|
46
|
+
const timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
47
|
+
hour: 'numeric',
|
|
48
|
+
minute: 'numeric',
|
|
49
|
+
second: 'numeric',
|
|
50
|
+
});
|
|
51
|
+
// Rollup's `input` can be a string, an array of strings, or an object.
|
|
52
|
+
// https://rollupjs.org/configuration-options/#input
|
|
53
|
+
const input = resolved.build?.rollupOptions?.input ??
|
|
54
|
+
(typeof resolved.build?.lib !== 'boolean'
|
|
55
|
+
? resolved.build?.lib?.entry
|
|
56
|
+
: undefined);
|
|
57
|
+
const targetDisplay = !input
|
|
58
|
+
? ''
|
|
59
|
+
: typeof input === 'string'
|
|
60
|
+
? input
|
|
61
|
+
: Array.isArray(input)
|
|
62
|
+
? input.join(' ')
|
|
63
|
+
: Object.keys(input).join(' ');
|
|
64
|
+
let firstBuildSent = false;
|
|
65
|
+
const sendOnce = (msg) => {
|
|
66
|
+
if (firstBuildSent)
|
|
67
|
+
return;
|
|
68
|
+
firstBuildSent = true;
|
|
69
|
+
process.send?.(msg);
|
|
70
|
+
};
|
|
71
|
+
const result = await build({
|
|
72
|
+
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
73
|
+
configFile: false,
|
|
74
|
+
// We suppress Vite output and instead log lines using RollupWatcher events
|
|
75
|
+
logLevel: 'silent',
|
|
76
|
+
...resolved,
|
|
77
|
+
plugins: [
|
|
78
|
+
// `buildEnd` and `closeBundle` are Rollup output generation hooks.
|
|
79
|
+
// https://rollupjs.org/plugin-development/#output-generation-hooks
|
|
80
|
+
{
|
|
81
|
+
name: '@electron-forge/plugin-vite:build-done',
|
|
82
|
+
buildEnd(err) {
|
|
83
|
+
if (err instanceof Error) {
|
|
84
|
+
sendOnce({ type: 'first-build-error', message: err.message });
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
closeBundle() {
|
|
88
|
+
sendOnce({ type: 'first-build-done' });
|
|
89
|
+
if (target === 'preload') {
|
|
90
|
+
// pluginHotRestart('reload') is a no-op here because viteDevServers
|
|
91
|
+
// lives in the parent; ask the parent to fan out the ws full-reload.
|
|
92
|
+
process.send?.({ type: 'reload-renderers' });
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
...(resolved.plugins ?? []),
|
|
97
|
+
],
|
|
98
|
+
clearScreen: false,
|
|
99
|
+
});
|
|
100
|
+
const isRollupWatcher = (x) => !!x &&
|
|
101
|
+
typeof x === 'object' &&
|
|
102
|
+
'on' in x &&
|
|
103
|
+
typeof x.on === 'function' &&
|
|
104
|
+
'close' in x &&
|
|
105
|
+
typeof x.close === 'function';
|
|
106
|
+
if (isRollupWatcher(result)) {
|
|
107
|
+
// The Rollup watcher emits events for subsequent builds.
|
|
108
|
+
result.on('event', (event) => {
|
|
109
|
+
if (event.code === 'ERROR' && resolved.logLevel !== 'silent') {
|
|
110
|
+
console.error(`\n${chalk.dim(timeFormatter.format(new Date()))} ${event.error.message}`);
|
|
111
|
+
}
|
|
112
|
+
else if (event.code === 'BUNDLE_END' &&
|
|
113
|
+
(!resolved.logLevel || resolved.logLevel === 'info')) {
|
|
114
|
+
console.log(`${chalk.dim(timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green('target built')} ${chalk.dim(targetDisplay)}`);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VicHJvY2Vzcy13b3JrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3VicHJvY2Vzcy13b3JrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxtQkFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQVNsRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDO0FBQ3RELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBdUMsQ0FBQztBQUNqRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7QUFDaEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsS0FBSyxHQUFHLENBQUM7QUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0FBRWhFLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkUsT0FBTyxDQUFDLEtBQUssQ0FDWCxnSEFBZ0gsQ0FDakgsQ0FBQztJQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSw0RUFBNEU7QUFDNUUsc0NBQXNDO0FBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/plugin-vite",
|
|
3
|
-
"version": "8.0.0-alpha.
|
|
3
|
+
"version": "8.0.0-alpha.8",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Vite plugin for Electron Forge, lets you use Vite directly in your tooling",
|
|
6
6
|
"repository": {
|
|
@@ -10,11 +10,16 @@
|
|
|
10
10
|
},
|
|
11
11
|
"author": "caoxiemeihao",
|
|
12
12
|
"license": "MIT",
|
|
13
|
-
"exports":
|
|
14
|
-
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/VitePlugin.d.ts",
|
|
16
|
+
"default": "./dist/VitePlugin.js"
|
|
17
|
+
},
|
|
18
|
+
"./forge-vite-env": "./forge-vite-env.d.ts"
|
|
19
|
+
},
|
|
15
20
|
"dependencies": {
|
|
16
|
-
"@electron-forge/plugin-base": "8.0.0-alpha.
|
|
17
|
-
"@electron-forge/shared-types": "8.0.0-alpha.
|
|
21
|
+
"@electron-forge/plugin-base": "8.0.0-alpha.8",
|
|
22
|
+
"@electron-forge/shared-types": "8.0.0-alpha.8",
|
|
18
23
|
"chalk": "^4.0.0",
|
|
19
24
|
"debug": "^4.3.1",
|
|
20
25
|
"fs-extra": "^10.0.0",
|
|
@@ -22,11 +27,9 @@
|
|
|
22
27
|
},
|
|
23
28
|
"devDependencies": {
|
|
24
29
|
"@electron/packager": "^19.0.1",
|
|
25
|
-
"@malept/cross-spawn-promise": "^2.0.0",
|
|
26
30
|
"@types/node": "^22.10.7",
|
|
27
|
-
"vite": "^
|
|
28
|
-
"vitest": "
|
|
29
|
-
"which": "^2.0.2",
|
|
31
|
+
"vite": "^8.0.0",
|
|
32
|
+
"vitest": "catalog:",
|
|
30
33
|
"xvfb-maybe": "^0.2.1"
|
|
31
34
|
},
|
|
32
35
|
"engines": {
|
|
@@ -40,5 +43,5 @@
|
|
|
40
43
|
"src",
|
|
41
44
|
"forge-vite-env.d.ts"
|
|
42
45
|
],
|
|
43
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "e6e0d0024702cdeccce2a612d7115479ab07244c"
|
|
44
47
|
}
|
package/src/VitePlugin.ts
CHANGED
|
@@ -8,6 +8,7 @@ import fs from 'fs-extra';
|
|
|
8
8
|
import { Listr, PRESET_TIMER } from 'listr2';
|
|
9
9
|
import * as vite from 'vite';
|
|
10
10
|
|
|
11
|
+
import { viteDevServerUrls } from './config/vite.base.config.js';
|
|
11
12
|
import ViteConfigGenerator from './ViteConfig.js';
|
|
12
13
|
|
|
13
14
|
import type { VitePluginConfig } from './Config.js';
|
|
@@ -16,6 +17,7 @@ import type {
|
|
|
16
17
|
ForgeMultiHookMap,
|
|
17
18
|
ResolvedForgeConfig,
|
|
18
19
|
} from '@electron-forge/shared-types';
|
|
20
|
+
import type { ChildProcess } from 'node:child_process';
|
|
19
21
|
import type { AddressInfo } from 'node:net';
|
|
20
22
|
import type { LibraryOptions } from 'vite';
|
|
21
23
|
|
|
@@ -76,6 +78,72 @@ function spawnViteBuild(
|
|
|
76
78
|
});
|
|
77
79
|
}
|
|
78
80
|
|
|
81
|
+
function spawnViteBuildWatch(
|
|
82
|
+
pluginConfig: Pick<VitePluginConfig, 'build' | 'renderer'>,
|
|
83
|
+
index: number,
|
|
84
|
+
projectDir: string,
|
|
85
|
+
devServerUrls: Record<string, string>,
|
|
86
|
+
onReloadRenderers: () => void,
|
|
87
|
+
): { child: ChildProcess; firstBuild: Promise<void> } {
|
|
88
|
+
const child = spawn(process.execPath, [subprocessWorkerPath], {
|
|
89
|
+
cwd: projectDir,
|
|
90
|
+
env: {
|
|
91
|
+
...process.env,
|
|
92
|
+
FORGE_VITE_PROJECT_DIR: projectDir,
|
|
93
|
+
FORGE_VITE_KIND: 'build',
|
|
94
|
+
FORGE_VITE_INDEX: String(index),
|
|
95
|
+
FORGE_VITE_CONFIG: JSON.stringify(pluginConfig),
|
|
96
|
+
FORGE_VITE_WATCH: '1',
|
|
97
|
+
FORGE_VITE_DEV_SERVER_URLS: JSON.stringify(devServerUrls),
|
|
98
|
+
},
|
|
99
|
+
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
let settled = false;
|
|
103
|
+
let stderr = '';
|
|
104
|
+
child.stderr!.setEncoding('utf8');
|
|
105
|
+
child.stderr!.on('data', (chunk) => {
|
|
106
|
+
if (!settled) stderr += chunk;
|
|
107
|
+
process.stderr.write(chunk);
|
|
108
|
+
});
|
|
109
|
+
child.stdout!.setEncoding('utf8');
|
|
110
|
+
child.stdout!.on('data', (chunk) => process.stdout.write(chunk));
|
|
111
|
+
|
|
112
|
+
const firstBuild = new Promise<void>((resolve, reject) => {
|
|
113
|
+
const settle = (fn: () => void) => {
|
|
114
|
+
if (settled) return;
|
|
115
|
+
settled = true;
|
|
116
|
+
stderr = '';
|
|
117
|
+
fn();
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
child.on('message', (msg: { type: string; message?: string }) => {
|
|
121
|
+
if (msg.type === 'first-build-done') {
|
|
122
|
+
settle(resolve);
|
|
123
|
+
} else if (msg.type === 'first-build-error') {
|
|
124
|
+
settle(() => reject(new Error(msg.message)));
|
|
125
|
+
} else if (msg.type === 'reload-renderers') {
|
|
126
|
+
onReloadRenderers();
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
child.on('error', (err) => settle(() => reject(err)));
|
|
130
|
+
child.on('close', (code, signal) => {
|
|
131
|
+
const reason = signal
|
|
132
|
+
? `killed by signal ${signal}`
|
|
133
|
+
: `exited with code ${code}`;
|
|
134
|
+
settle(() =>
|
|
135
|
+
reject(
|
|
136
|
+
new Error(
|
|
137
|
+
`Vite watch subprocess ${reason} before first build completed${stderr ? `:\n${stderr}` : ''}`,
|
|
138
|
+
),
|
|
139
|
+
),
|
|
140
|
+
);
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
return { child, firstBuild };
|
|
145
|
+
}
|
|
146
|
+
|
|
79
147
|
function entryToDisplay(entry: LibraryOptions['entry']): string {
|
|
80
148
|
if (typeof entry === 'string') return entry;
|
|
81
149
|
if (Array.isArray(entry)) return entry.join(' ');
|
|
@@ -101,17 +169,10 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
101
169
|
|
|
102
170
|
private configGeneratorCache!: ViteConfigGenerator;
|
|
103
171
|
|
|
104
|
-
private
|
|
172
|
+
private watchChildren: ChildProcess[] = [];
|
|
105
173
|
|
|
106
174
|
private servers: vite.ViteDevServer[] = [];
|
|
107
175
|
|
|
108
|
-
// Matches the format of the default Vite logger
|
|
109
|
-
private timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
110
|
-
hour: 'numeric',
|
|
111
|
-
minute: 'numeric',
|
|
112
|
-
second: 'numeric',
|
|
113
|
-
});
|
|
114
|
-
|
|
115
176
|
init = (dir: string): void => {
|
|
116
177
|
this.setDirectories(dir);
|
|
117
178
|
|
|
@@ -285,10 +346,11 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
285
346
|
|
|
286
347
|
// Main process, Preload scripts and Worker process, etc.
|
|
287
348
|
build = async (task?: ForgeListrTask<null>): Promise<Listr | void> => {
|
|
349
|
+
const targets = this.config.build
|
|
350
|
+
.map((spec, index) => ({ spec, index }))
|
|
351
|
+
.filter(({ spec }) => spec.config);
|
|
352
|
+
|
|
288
353
|
if (this.isProd) {
|
|
289
|
-
const targets = this.config.build
|
|
290
|
-
.map((spec, index) => ({ spec, index }))
|
|
291
|
-
.filter(({ spec }) => spec.config);
|
|
292
354
|
return task?.newListr(
|
|
293
355
|
targets.map(({ spec, index }) => ({
|
|
294
356
|
title: `Building ${chalk.green(entryToDisplay(spec.entry))}`,
|
|
@@ -309,129 +371,28 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
309
371
|
);
|
|
310
372
|
}
|
|
311
373
|
|
|
312
|
-
const configs = await this.configGenerator.getBuildConfigs();
|
|
313
|
-
/**
|
|
314
|
-
* Checks if the result of the Vite build is a Rollup watcher.
|
|
315
|
-
* This should happen iff we're running `electron-forge start`.
|
|
316
|
-
*/
|
|
317
|
-
const isRollupWatcher = (
|
|
318
|
-
x:
|
|
319
|
-
| vite.Rollup.RollupWatcher
|
|
320
|
-
| vite.Rollup.RollupOutput
|
|
321
|
-
| vite.Rollup.RollupOutput[],
|
|
322
|
-
): x is vite.Rollup.RollupWatcher =>
|
|
323
|
-
x &&
|
|
324
|
-
typeof x === 'object' &&
|
|
325
|
-
'on' in x &&
|
|
326
|
-
typeof x.on === 'function' &&
|
|
327
|
-
'close' in x &&
|
|
328
|
-
typeof x.close === 'function';
|
|
329
|
-
|
|
330
|
-
/**
|
|
331
|
-
* Rollup's `input` can be a string, an array of strings, or an object.
|
|
332
|
-
* This function converts the input to a string for the Forge CLI to consume.
|
|
333
|
-
*
|
|
334
|
-
* @see https://rollupjs.org/configuration-options/#input
|
|
335
|
-
*/
|
|
336
|
-
const parseInputOptionToString = (input: vite.Rollup.InputOption) => {
|
|
337
|
-
if (typeof input === 'string') {
|
|
338
|
-
return input;
|
|
339
|
-
} else if (Array.isArray(input)) {
|
|
340
|
-
return input.join(' ');
|
|
341
|
-
} else {
|
|
342
|
-
return Object.keys(input).join(' ');
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
|
|
346
374
|
return task?.newListr(
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
await new Promise<void>((resolve, reject) => {
|
|
366
|
-
vite
|
|
367
|
-
.build({
|
|
368
|
-
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
369
|
-
configFile: false,
|
|
370
|
-
// We suppress Vite output and instead log lines using RollupWatcher events
|
|
371
|
-
logLevel: 'silent',
|
|
372
|
-
...userConfig,
|
|
373
|
-
plugins: [
|
|
374
|
-
// This plugin controls the output of the first-time Vite build that happens.
|
|
375
|
-
// `buildEnd` and `closeBundle` are Rollup output generation hooks.
|
|
376
|
-
// See https://rollupjs.org/plugin-development/#output-generation-hooks
|
|
377
|
-
{
|
|
378
|
-
name: '@electron-forge/plugin-vite:build-done',
|
|
379
|
-
buildEnd(err) {
|
|
380
|
-
if (err instanceof Error) {
|
|
381
|
-
d(
|
|
382
|
-
'buildEnd rollup hook called with error so build failed',
|
|
383
|
-
);
|
|
384
|
-
reject(err);
|
|
385
|
-
}
|
|
386
|
-
},
|
|
387
|
-
closeBundle() {
|
|
388
|
-
d(
|
|
389
|
-
'no error in buildEnd and reached closeBundle so build succeeded',
|
|
390
|
-
);
|
|
391
|
-
resolve();
|
|
392
|
-
},
|
|
393
|
-
},
|
|
394
|
-
...(userConfig.plugins ?? []),
|
|
395
|
-
],
|
|
396
|
-
clearScreen: false,
|
|
397
|
-
})
|
|
398
|
-
.then((result) => {
|
|
399
|
-
// When running `start` and enabling watch mode in Vite, the Rollup watcher
|
|
400
|
-
// emits events for subsequent builds.
|
|
401
|
-
if (isRollupWatcher(result)) {
|
|
402
|
-
result.on('event', (event) => {
|
|
403
|
-
if (
|
|
404
|
-
event.code === 'ERROR' &&
|
|
405
|
-
userConfig.logLevel !== 'silent'
|
|
406
|
-
) {
|
|
407
|
-
console.error(
|
|
408
|
-
`\n${chalk.dim(this.timeFormatter.format(new Date()))} ${event.error.message}`,
|
|
409
|
-
);
|
|
410
|
-
} else if (
|
|
411
|
-
event.code === 'BUNDLE_END' &&
|
|
412
|
-
(!userConfig.logLevel || userConfig.logLevel === 'info')
|
|
413
|
-
) {
|
|
414
|
-
console.log(
|
|
415
|
-
`${chalk.dim(this.timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green(
|
|
416
|
-
'target built',
|
|
417
|
-
)} ${chalk.dim(target)}`,
|
|
418
|
-
);
|
|
419
|
-
}
|
|
420
|
-
});
|
|
421
|
-
this.watchers.push(result);
|
|
422
|
-
} else {
|
|
423
|
-
subtask.title = `Built target ${chalk.dim(target)}`;
|
|
424
|
-
}
|
|
425
|
-
return result;
|
|
426
|
-
})
|
|
427
|
-
.catch(reject);
|
|
428
|
-
});
|
|
429
|
-
},
|
|
430
|
-
};
|
|
431
|
-
}),
|
|
375
|
+
targets.map(({ spec, index }) => ({
|
|
376
|
+
title: `Building ${chalk.green(entryToDisplay(spec.entry))} target`,
|
|
377
|
+
task: async () => {
|
|
378
|
+
const { child, firstBuild } = spawnViteBuildWatch(
|
|
379
|
+
this.serializableConfig,
|
|
380
|
+
index,
|
|
381
|
+
this.projectDir,
|
|
382
|
+
viteDevServerUrls,
|
|
383
|
+
() => {
|
|
384
|
+
for (const server of this.servers) {
|
|
385
|
+
server.ws.send({ type: 'full-reload' });
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
);
|
|
389
|
+
this.watchChildren.push(child);
|
|
390
|
+
await firstBuild;
|
|
391
|
+
},
|
|
392
|
+
})),
|
|
432
393
|
{
|
|
433
394
|
concurrent: this.config.concurrent ?? true,
|
|
434
|
-
exitOnError:
|
|
395
|
+
exitOnError: false,
|
|
435
396
|
},
|
|
436
397
|
);
|
|
437
398
|
};
|
|
@@ -524,11 +485,11 @@ the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
|
524
485
|
): void => {
|
|
525
486
|
d('handling process exit with:', options);
|
|
526
487
|
if (options.cleanup) {
|
|
527
|
-
for (const
|
|
528
|
-
d('
|
|
529
|
-
|
|
488
|
+
for (const child of this.watchChildren) {
|
|
489
|
+
d('killing vite watch subprocess');
|
|
490
|
+
child.kill();
|
|
530
491
|
}
|
|
531
|
-
this.
|
|
492
|
+
this.watchChildren = [];
|
|
532
493
|
|
|
533
494
|
for (const server of this.servers) {
|
|
534
495
|
d('cleaning http server');
|
|
@@ -3,17 +3,15 @@ import { builtinModules } from 'node:module';
|
|
|
3
3
|
import type { AddressInfo } from 'node:net';
|
|
4
4
|
import type { ConfigEnv, Plugin, UserConfig, ViteDevServer } from 'vite';
|
|
5
5
|
|
|
6
|
-
export const
|
|
6
|
+
export const external = [
|
|
7
7
|
'electron',
|
|
8
8
|
'electron/common',
|
|
9
9
|
...builtinModules.map((m) => [m, `node:${m}`]).flat(),
|
|
10
10
|
];
|
|
11
11
|
|
|
12
|
-
export const external = [...builtins];
|
|
13
|
-
|
|
14
12
|
// Used for hot reload after preload scripts.
|
|
15
13
|
const viteDevServers: Record<string, ViteDevServer> = {};
|
|
16
|
-
const viteDevServerUrls: Record<string, string> = {};
|
|
14
|
+
export const viteDevServerUrls: Record<string, string> = {};
|
|
17
15
|
|
|
18
16
|
export function getBuildConfig(env: ConfigEnv<'build'>): UserConfig {
|
|
19
17
|
const { root, mode, command } = env;
|
|
@@ -26,7 +24,7 @@ export function getBuildConfig(env: ConfigEnv<'build'>): UserConfig {
|
|
|
26
24
|
emptyOutDir: false,
|
|
27
25
|
// 🚧 Multiple builds may conflict.
|
|
28
26
|
outDir: '.vite/build',
|
|
29
|
-
watch: command === 'serve' ? {} : null,
|
|
27
|
+
watch: command === 'serve' ? { exclude: '**/.git/**' } : null,
|
|
30
28
|
minify: command === 'build',
|
|
31
29
|
},
|
|
32
30
|
clearScreen: false,
|
|
@@ -20,8 +20,8 @@ export function getConfig(
|
|
|
20
20
|
input: forgeConfigSelf.entry,
|
|
21
21
|
output: {
|
|
22
22
|
format: 'cjs',
|
|
23
|
-
//
|
|
24
|
-
|
|
23
|
+
// Preload scripts require a single entrypoint.
|
|
24
|
+
codeSplitting: false,
|
|
25
25
|
entryFileNames: '[name].js',
|
|
26
26
|
chunkFileNames: '[name].js',
|
|
27
27
|
assetFileNames: '[name].[ext]',
|
package/src/subprocess-worker.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
1
2
|
import { build } from 'vite';
|
|
2
3
|
|
|
4
|
+
import { viteDevServerUrls } from './config/vite.base.config.js';
|
|
3
5
|
import ViteConfigGenerator from './ViteConfig.js';
|
|
4
6
|
|
|
5
7
|
import type {
|
|
@@ -7,11 +9,14 @@ import type {
|
|
|
7
9
|
VitePluginConfig,
|
|
8
10
|
VitePluginRendererConfig,
|
|
9
11
|
} from './Config.js';
|
|
12
|
+
import type { Rollup } from 'vite';
|
|
10
13
|
|
|
11
14
|
const projectDir = process.env.FORGE_VITE_PROJECT_DIR;
|
|
12
15
|
const kind = process.env.FORGE_VITE_KIND as 'build' | 'renderer';
|
|
13
16
|
const index = Number(process.env.FORGE_VITE_INDEX);
|
|
14
17
|
const rawConfig = process.env.FORGE_VITE_CONFIG;
|
|
18
|
+
const watch = process.env.FORGE_VITE_WATCH === '1';
|
|
19
|
+
const rawDevServerUrls = process.env.FORGE_VITE_DEV_SERVER_URLS;
|
|
15
20
|
|
|
16
21
|
if (!projectDir || !kind || !rawConfig || !Number.isInteger(index)) {
|
|
17
22
|
console.error(
|
|
@@ -25,7 +30,7 @@ if (!projectDir || !kind || !rawConfig || !Number.isInteger(index)) {
|
|
|
25
30
|
// defines when building main targets.
|
|
26
31
|
const pluginConfig = JSON.parse(rawConfig) as VitePluginConfig;
|
|
27
32
|
|
|
28
|
-
const generator = new ViteConfigGenerator(pluginConfig, projectDir,
|
|
33
|
+
const generator = new ViteConfigGenerator(pluginConfig, projectDir, !watch);
|
|
29
34
|
|
|
30
35
|
let spec: VitePluginBuildConfig | VitePluginRendererConfig;
|
|
31
36
|
let target: 'main' | 'preload' | 'renderer';
|
|
@@ -37,11 +42,106 @@ if (kind === 'build') {
|
|
|
37
42
|
target = 'renderer';
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
// Seed the module-level URL map so getBuildDefine() produces the same
|
|
46
|
+
// *_VITE_DEV_SERVER_URL defines the in-process path would have.
|
|
47
|
+
if (rawDevServerUrls) {
|
|
48
|
+
Object.assign(viteDevServerUrls, JSON.parse(rawDevServerUrls));
|
|
49
|
+
}
|
|
50
|
+
|
|
40
51
|
const resolved = await generator.resolveConfig(spec, target);
|
|
41
52
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
53
|
+
if (!watch) {
|
|
54
|
+
await build({
|
|
55
|
+
configFile: false,
|
|
56
|
+
logLevel: 'error',
|
|
57
|
+
...resolved,
|
|
58
|
+
clearScreen: false,
|
|
59
|
+
});
|
|
60
|
+
} else {
|
|
61
|
+
// Matches the format of the default Vite logger
|
|
62
|
+
const timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
63
|
+
hour: 'numeric',
|
|
64
|
+
minute: 'numeric',
|
|
65
|
+
second: 'numeric',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Rollup's `input` can be a string, an array of strings, or an object.
|
|
69
|
+
// https://rollupjs.org/configuration-options/#input
|
|
70
|
+
const input =
|
|
71
|
+
resolved.build?.rollupOptions?.input ??
|
|
72
|
+
(typeof resolved.build?.lib !== 'boolean'
|
|
73
|
+
? resolved.build?.lib?.entry
|
|
74
|
+
: undefined);
|
|
75
|
+
const targetDisplay = !input
|
|
76
|
+
? ''
|
|
77
|
+
: typeof input === 'string'
|
|
78
|
+
? input
|
|
79
|
+
: Array.isArray(input)
|
|
80
|
+
? input.join(' ')
|
|
81
|
+
: Object.keys(input).join(' ');
|
|
82
|
+
|
|
83
|
+
let firstBuildSent = false;
|
|
84
|
+
const sendOnce = (msg: { type: string; message?: string }) => {
|
|
85
|
+
if (firstBuildSent) return;
|
|
86
|
+
firstBuildSent = true;
|
|
87
|
+
process.send?.(msg);
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const result = await build({
|
|
91
|
+
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
92
|
+
configFile: false,
|
|
93
|
+
// We suppress Vite output and instead log lines using RollupWatcher events
|
|
94
|
+
logLevel: 'silent',
|
|
95
|
+
...resolved,
|
|
96
|
+
plugins: [
|
|
97
|
+
// `buildEnd` and `closeBundle` are Rollup output generation hooks.
|
|
98
|
+
// https://rollupjs.org/plugin-development/#output-generation-hooks
|
|
99
|
+
{
|
|
100
|
+
name: '@electron-forge/plugin-vite:build-done',
|
|
101
|
+
buildEnd(err) {
|
|
102
|
+
if (err instanceof Error) {
|
|
103
|
+
sendOnce({ type: 'first-build-error', message: err.message });
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
closeBundle() {
|
|
107
|
+
sendOnce({ type: 'first-build-done' });
|
|
108
|
+
if (target === 'preload') {
|
|
109
|
+
// pluginHotRestart('reload') is a no-op here because viteDevServers
|
|
110
|
+
// lives in the parent; ask the parent to fan out the ws full-reload.
|
|
111
|
+
process.send?.({ type: 'reload-renderers' });
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
...(resolved.plugins ?? []),
|
|
116
|
+
],
|
|
117
|
+
clearScreen: false,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
const isRollupWatcher = (x: unknown): x is Rollup.RollupWatcher =>
|
|
121
|
+
!!x &&
|
|
122
|
+
typeof x === 'object' &&
|
|
123
|
+
'on' in x &&
|
|
124
|
+
typeof x.on === 'function' &&
|
|
125
|
+
'close' in x &&
|
|
126
|
+
typeof x.close === 'function';
|
|
127
|
+
|
|
128
|
+
if (isRollupWatcher(result)) {
|
|
129
|
+
// The Rollup watcher emits events for subsequent builds.
|
|
130
|
+
result.on('event', (event) => {
|
|
131
|
+
if (event.code === 'ERROR' && resolved.logLevel !== 'silent') {
|
|
132
|
+
console.error(
|
|
133
|
+
`\n${chalk.dim(timeFormatter.format(new Date()))} ${event.error.message}`,
|
|
134
|
+
);
|
|
135
|
+
} else if (
|
|
136
|
+
event.code === 'BUNDLE_END' &&
|
|
137
|
+
(!resolved.logLevel || resolved.logLevel === 'info')
|
|
138
|
+
) {
|
|
139
|
+
console.log(
|
|
140
|
+
`${chalk.dim(timeFormatter.format(new Date()))} ${chalk.cyan.bold('[@electron-forge/plugin-vite]')} ${chalk.green(
|
|
141
|
+
'target built',
|
|
142
|
+
)} ${chalk.dim(targetDisplay)}`,
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|