@electron-forge/plugin-vite 8.0.0-alpha.4 → 8.0.0-alpha.6
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/Config.js +1 -2
- package/dist/ViteConfig.d.ts +1 -1
- package/dist/ViteConfig.d.ts.map +1 -1
- package/dist/ViteConfig.js +15 -18
- package/dist/VitePlugin.d.ts +9 -3
- package/dist/VitePlugin.d.ts.map +1 -1
- package/dist/VitePlugin.js +392 -307
- package/dist/config/vite.base.config.js +10 -18
- package/dist/config/vite.main.config.js +9 -13
- package/dist/config/vite.preload.config.d.ts.map +1 -1
- package/dist/config/vite.preload.config.js +8 -12
- package/dist/config/vite.renderer.config.js +6 -10
- package/dist/subprocess-worker.d.ts +2 -0
- package/dist/subprocess-worker.d.ts.map +1 -0
- package/dist/subprocess-worker.js +33 -0
- package/forge-vite-env.d.ts +1 -1
- package/package.json +10 -9
- package/src/ViteConfig.ts +4 -4
- package/src/VitePlugin.ts +129 -6
- package/src/config/vite.main.config.ts +1 -1
- package/src/config/vite.preload.config.ts +5 -1
- package/src/config/vite.renderer.config.ts +1 -1
- package/src/subprocess-worker.ts +47 -0
package/dist/VitePlugin.js
CHANGED
|
@@ -1,330 +1,414 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.servers = [];
|
|
25
|
-
// Matches the format of the default Vite logger
|
|
26
|
-
this.timeFormatter = new Intl.DateTimeFormat(undefined, {
|
|
27
|
-
hour: 'numeric',
|
|
28
|
-
minute: 'numeric',
|
|
29
|
-
second: 'numeric',
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { namedHookWithTaskFn, PluginBase } from '@electron-forge/plugin-base';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import debug from 'debug';
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
import { PRESET_TIMER } from 'listr2';
|
|
8
|
+
import * as vite from 'vite';
|
|
9
|
+
import ViteConfigGenerator from './ViteConfig.js';
|
|
10
|
+
const d = debug('electron-forge:plugin:vite');
|
|
11
|
+
const subprocessWorkerPath = path.resolve(import.meta.dirname, 'subprocess-worker.js');
|
|
12
|
+
function spawnViteBuild(pluginConfig, kind, index, projectDir) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const child = spawn(process.execPath, [subprocessWorkerPath], {
|
|
15
|
+
cwd: projectDir,
|
|
16
|
+
env: {
|
|
17
|
+
...process.env,
|
|
18
|
+
FORGE_VITE_PROJECT_DIR: projectDir,
|
|
19
|
+
FORGE_VITE_KIND: kind,
|
|
20
|
+
FORGE_VITE_INDEX: String(index),
|
|
21
|
+
FORGE_VITE_CONFIG: JSON.stringify(pluginConfig),
|
|
22
|
+
},
|
|
23
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
30
24
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
25
|
+
let stdout = '';
|
|
26
|
+
child.stdout.setEncoding('utf8');
|
|
27
|
+
child.stdout.on('data', (chunk) => {
|
|
28
|
+
stdout += chunk;
|
|
29
|
+
});
|
|
30
|
+
let stderr = '';
|
|
31
|
+
child.stderr.setEncoding('utf8');
|
|
32
|
+
child.stderr.on('data', (chunk) => {
|
|
33
|
+
stderr += chunk;
|
|
34
|
+
});
|
|
35
|
+
child.on('error', reject);
|
|
36
|
+
child.on('close', (code, signal) => {
|
|
37
|
+
if (code === 0) {
|
|
38
|
+
resolve();
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const output = [stdout, stderr].filter(Boolean).join('\n');
|
|
42
|
+
const reason = signal
|
|
43
|
+
? `killed by signal ${signal}`
|
|
44
|
+
: `exited with code ${code}`;
|
|
45
|
+
reject(new Error(`Vite build subprocess ${reason}${output ? `:\n${output}` : ''}`));
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function entryToDisplay(entry) {
|
|
51
|
+
if (typeof entry === 'string')
|
|
52
|
+
return entry;
|
|
53
|
+
if (Array.isArray(entry))
|
|
54
|
+
return entry.join(' ');
|
|
55
|
+
return Object.keys(entry).join(' ');
|
|
56
|
+
}
|
|
57
|
+
export default class VitePlugin extends PluginBase {
|
|
58
|
+
static alreadyStarted = false;
|
|
59
|
+
name = 'vite';
|
|
60
|
+
isProd = false;
|
|
61
|
+
/**
|
|
62
|
+
* Path to the root of the Electron app
|
|
63
|
+
*/
|
|
64
|
+
projectDir;
|
|
65
|
+
/**
|
|
66
|
+
* Path where Vite output is generated. Usually `${projectDir}/.vite`
|
|
67
|
+
*/
|
|
68
|
+
baseDir;
|
|
69
|
+
configGeneratorCache;
|
|
70
|
+
watchers = [];
|
|
71
|
+
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
|
+
init = (dir) => {
|
|
79
|
+
this.setDirectories(dir);
|
|
80
|
+
d('hooking process events');
|
|
81
|
+
process.on('exit', (_code) => {
|
|
82
|
+
this.exitHandler({ cleanup: true });
|
|
83
|
+
});
|
|
84
|
+
process.on('SIGINT', (_signal) => {
|
|
85
|
+
this.exitHandler({ exit: true });
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
setDirectories(dir) {
|
|
89
|
+
this.projectDir = dir;
|
|
90
|
+
this.baseDir = path.join(dir, '.vite');
|
|
91
|
+
}
|
|
92
|
+
get configGenerator() {
|
|
93
|
+
return (this.configGeneratorCache ??= new ViteConfigGenerator(this.config, this.projectDir, this.isProd));
|
|
94
|
+
}
|
|
95
|
+
getHooks = () => {
|
|
96
|
+
return {
|
|
97
|
+
preStart: [
|
|
98
|
+
namedHookWithTaskFn(async (task) => {
|
|
99
|
+
if (VitePlugin.alreadyStarted)
|
|
100
|
+
return;
|
|
101
|
+
VitePlugin.alreadyStarted = true;
|
|
102
|
+
d(`preStart: removing old content from ${this.baseDir}`);
|
|
103
|
+
await fs.remove(this.baseDir);
|
|
104
|
+
return task?.newListr([
|
|
105
|
+
{
|
|
106
|
+
title: 'Launching Vite dev servers for renderer process code...',
|
|
107
|
+
task: async (_ctx, task) => {
|
|
108
|
+
const result = await this.launchRendererDevServers(task);
|
|
109
|
+
task.title =
|
|
110
|
+
'Launched Vite dev servers for renderer process code';
|
|
111
|
+
return result;
|
|
63
112
|
},
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
task: async (_ctx, task) => {
|
|
68
|
-
const result = await this.build(task);
|
|
69
|
-
task.title = 'Built main process and preload bundles';
|
|
70
|
-
return result;
|
|
71
|
-
},
|
|
72
|
-
rendererOptions: {
|
|
73
|
-
persistentOutput: true,
|
|
74
|
-
timer: { ...listr2_1.PRESET_TIMER },
|
|
75
|
-
},
|
|
113
|
+
rendererOptions: {
|
|
114
|
+
persistentOutput: true,
|
|
115
|
+
timer: { ...PRESET_TIMER },
|
|
76
116
|
},
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
title: 'Building main and preload targets...',
|
|
87
|
-
task: async (_ctx, subtask) => {
|
|
88
|
-
const results = await this.build(subtask);
|
|
89
|
-
return results;
|
|
90
|
-
},
|
|
117
|
+
},
|
|
118
|
+
// The main process depends on the `server.port` of the renderer process, so the renderer process is run first.
|
|
119
|
+
{
|
|
120
|
+
title: 'Building main process and preload bundles...',
|
|
121
|
+
task: async (_ctx, task) => {
|
|
122
|
+
const result = await this.build(task);
|
|
123
|
+
task.title = 'Built main process and preload bundles';
|
|
124
|
+
return result;
|
|
91
125
|
},
|
|
92
|
-
{
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const results = await this.buildRenderer(subtask);
|
|
96
|
-
return results;
|
|
97
|
-
},
|
|
126
|
+
rendererOptions: {
|
|
127
|
+
persistentOutput: true,
|
|
128
|
+
timer: { ...PRESET_TIMER },
|
|
98
129
|
},
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
130
|
+
},
|
|
131
|
+
], { concurrent: false });
|
|
132
|
+
}, 'Preparing Vite bundles'),
|
|
133
|
+
],
|
|
134
|
+
prePackage: [
|
|
135
|
+
namedHookWithTaskFn(async (task) => {
|
|
136
|
+
this.isProd = true;
|
|
137
|
+
await fs.remove(this.baseDir);
|
|
138
|
+
return task?.newListr([
|
|
139
|
+
{
|
|
140
|
+
title: 'Building main and preload targets...',
|
|
141
|
+
task: async (_ctx, subtask) => {
|
|
142
|
+
const results = await this.build(subtask);
|
|
143
|
+
return results;
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
title: 'Building renderer targets...',
|
|
148
|
+
task: async (_ctx, subtask) => {
|
|
149
|
+
const results = await this.buildRenderer(subtask);
|
|
150
|
+
return results;
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
], { concurrent: true });
|
|
154
|
+
}, 'Building production Vite bundles'),
|
|
155
|
+
],
|
|
156
|
+
postStart: async (_config, child) => {
|
|
157
|
+
d('hooking electron process exit');
|
|
158
|
+
child.on('exit', () => {
|
|
159
|
+
if (child.restarted)
|
|
160
|
+
return;
|
|
161
|
+
this.exitHandler({ cleanup: true, exit: true });
|
|
162
|
+
});
|
|
163
|
+
},
|
|
164
|
+
resolveForgeConfig: this.resolveForgeConfig,
|
|
165
|
+
packageAfterCopy: this.packageAfterCopy,
|
|
113
166
|
};
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
167
|
+
};
|
|
168
|
+
resolveForgeConfig = async (forgeConfig) => {
|
|
169
|
+
forgeConfig.packagerConfig ??= {};
|
|
170
|
+
if (forgeConfig.packagerConfig.ignore) {
|
|
171
|
+
if (typeof forgeConfig.packagerConfig.ignore !== 'function') {
|
|
172
|
+
console.error(chalk.yellow(`You have set packagerConfig.ignore, the Electron Forge Vite plugin normally sets this automatically.
|
|
119
173
|
|
|
120
174
|
Your packaged app may be larger than expected if you dont ignore everything other than the '.vite' folder`));
|
|
121
|
-
}
|
|
122
|
-
return forgeConfig;
|
|
123
175
|
}
|
|
124
|
-
forgeConfig.packagerConfig.ignore = (file) => {
|
|
125
|
-
if (!file)
|
|
126
|
-
return false;
|
|
127
|
-
// `file` always starts with `/`
|
|
128
|
-
// @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
|
|
129
|
-
// Collect the files built by Vite
|
|
130
|
-
return !file.startsWith('/.vite');
|
|
131
|
-
};
|
|
132
176
|
return forgeConfig;
|
|
177
|
+
}
|
|
178
|
+
forgeConfig.packagerConfig.ignore = (file) => {
|
|
179
|
+
if (!file)
|
|
180
|
+
return false;
|
|
181
|
+
// `file` always starts with `/`
|
|
182
|
+
// @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
|
|
183
|
+
// Collect the files built by Vite
|
|
184
|
+
return !file.startsWith('/.vite');
|
|
133
185
|
};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
186
|
+
return forgeConfig;
|
|
187
|
+
};
|
|
188
|
+
packageAfterCopy = async (_forgeConfig, buildPath) => {
|
|
189
|
+
const pj = await fs.readJson(path.resolve(this.projectDir, 'package.json'));
|
|
190
|
+
if (!pj.main?.includes('.vite/')) {
|
|
191
|
+
throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
|
|
138
192
|
"main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
|
|
139
193
|
the generated files). Instead, it is ${JSON.stringify(pj.main)}.`);
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
'on' in x &&
|
|
158
|
-
typeof x.on === 'function' &&
|
|
159
|
-
'close' in x &&
|
|
160
|
-
typeof x.close === 'function';
|
|
161
|
-
/**
|
|
162
|
-
* Rollup's `input` can be a string, an array of strings, or an object.
|
|
163
|
-
* This function converts the input to a string for the Forge CLI to consume.
|
|
164
|
-
*
|
|
165
|
-
* @see https://rollupjs.org/configuration-options/#input
|
|
166
|
-
*/
|
|
167
|
-
const parseInputOptionToString = (input) => {
|
|
168
|
-
if (typeof input === 'string') {
|
|
169
|
-
return input;
|
|
170
|
-
}
|
|
171
|
-
else if (Array.isArray(input)) {
|
|
172
|
-
return input.join(' ');
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
return Object.keys(input).join(' ');
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
return task?.newListr(configs.map((userConfig) => {
|
|
179
|
-
let target = '';
|
|
180
|
-
const input = userConfig.build?.rollupOptions?.input;
|
|
181
|
-
if (input) {
|
|
182
|
-
target = parseInputOptionToString(input);
|
|
183
|
-
}
|
|
184
|
-
else if (typeof userConfig.build?.lib !== 'boolean' &&
|
|
185
|
-
userConfig.build?.lib?.entry) {
|
|
186
|
-
target = parseInputOptionToString(userConfig.build.lib.entry);
|
|
187
|
-
}
|
|
188
|
-
return {
|
|
189
|
-
title: `Building ${chalk_1.default.green(target)} target`,
|
|
190
|
-
task: async (_ctx, subtask) => {
|
|
191
|
-
// We wrap this function in a Promise to ensure that the task is marked as completed
|
|
192
|
-
// only after all bundles are done generated. This is done in the `closeBundle` Rollup hook
|
|
193
|
-
// rather than when the `vite.build` promise resolves.
|
|
194
|
-
await new Promise((resolve, reject) => {
|
|
195
|
-
vite_1.default
|
|
196
|
-
.build({
|
|
197
|
-
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
198
|
-
configFile: false,
|
|
199
|
-
// We suppress Vite output and instead log lines using RollupWatcher events
|
|
200
|
-
logLevel: 'silent',
|
|
201
|
-
...userConfig,
|
|
202
|
-
plugins: [
|
|
203
|
-
// This plugin controls the output of the first-time Vite build that happens.
|
|
204
|
-
// `buildEnd` and `closeBundle` are Rollup output generation hooks.
|
|
205
|
-
// See https://rollupjs.org/plugin-development/#output-generation-hooks
|
|
206
|
-
{
|
|
207
|
-
name: '@electron-forge/plugin-vite:build-done',
|
|
208
|
-
buildEnd(err) {
|
|
209
|
-
if (err instanceof Error) {
|
|
210
|
-
d('buildEnd rollup hook called with error so build failed');
|
|
211
|
-
reject(err);
|
|
212
|
-
}
|
|
213
|
-
},
|
|
214
|
-
closeBundle() {
|
|
215
|
-
d('no error in buildEnd and reached closeBundle so build succeeded');
|
|
216
|
-
resolve();
|
|
217
|
-
},
|
|
218
|
-
},
|
|
219
|
-
...(userConfig.plugins ?? []),
|
|
220
|
-
],
|
|
221
|
-
clearScreen: false,
|
|
222
|
-
})
|
|
223
|
-
.then((result) => {
|
|
224
|
-
// When running `start` and enabling watch mode in Vite, the Rollup watcher
|
|
225
|
-
// emits events for subsequent builds.
|
|
226
|
-
if (isRollupWatcher(result)) {
|
|
227
|
-
result.on('event', (event) => {
|
|
228
|
-
if (event.code === 'ERROR' &&
|
|
229
|
-
userConfig.logLevel !== 'silent') {
|
|
230
|
-
console.error(`\n${chalk_1.default.dim(this.timeFormatter.format(new Date()))} ${event.error.message}`);
|
|
231
|
-
}
|
|
232
|
-
else if (event.code === 'BUNDLE_END' &&
|
|
233
|
-
(!userConfig.logLevel || userConfig.logLevel === 'info')) {
|
|
234
|
-
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)}`);
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
this.watchers.push(result);
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
subtask.title = `Built target ${chalk_1.default.dim(target)}`;
|
|
241
|
-
}
|
|
242
|
-
return result;
|
|
243
|
-
})
|
|
244
|
-
.catch(reject);
|
|
245
|
-
});
|
|
246
|
-
},
|
|
247
|
-
};
|
|
248
|
-
}), {
|
|
249
|
-
concurrent: this.config.concurrent ?? true,
|
|
250
|
-
exitOnError: this.isProd,
|
|
251
|
-
});
|
|
194
|
+
}
|
|
195
|
+
if (pj.config) {
|
|
196
|
+
delete pj.config.forge;
|
|
197
|
+
}
|
|
198
|
+
await fs.writeJson(path.resolve(buildPath, 'package.json'), pj, {
|
|
199
|
+
spaces: 2,
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
/**
|
|
203
|
+
* Serializable snapshot of the plugin config to pass to subprocess workers.
|
|
204
|
+
* We only include build[] and renderer[] — the worker needs the full renderer
|
|
205
|
+
* list for defines even when building a single main target.
|
|
206
|
+
*/
|
|
207
|
+
get serializableConfig() {
|
|
208
|
+
return {
|
|
209
|
+
build: this.config.build,
|
|
210
|
+
renderer: this.config.renderer,
|
|
252
211
|
};
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
212
|
+
}
|
|
213
|
+
// Main process, Preload scripts and Worker process, etc.
|
|
214
|
+
build = async (task) => {
|
|
215
|
+
if (this.isProd) {
|
|
216
|
+
const targets = this.config.build
|
|
217
|
+
.map((spec, index) => ({ spec, index }))
|
|
218
|
+
.filter(({ spec }) => spec.config);
|
|
219
|
+
return task?.newListr(targets.map(({ spec, index }) => ({
|
|
220
|
+
title: `Building ${chalk.green(entryToDisplay(spec.entry))}`,
|
|
257
221
|
task: async (_ctx, subtask) => {
|
|
258
|
-
await
|
|
259
|
-
|
|
260
|
-
logLevel: 'error',
|
|
261
|
-
...userConfig,
|
|
262
|
-
});
|
|
263
|
-
subtask.title = `Built target ${chalk_1.default.dim(node_path_1.default.basename(userConfig.build?.outDir ?? ''))}`;
|
|
222
|
+
await spawnViteBuild(this.serializableConfig, 'build', index, this.projectDir);
|
|
223
|
+
subtask.title = `Built target ${chalk.dim(entryToDisplay(spec.entry))}`;
|
|
264
224
|
},
|
|
265
225
|
})), {
|
|
266
226
|
concurrent: this.config.concurrent ?? true,
|
|
227
|
+
exitOnError: true,
|
|
267
228
|
});
|
|
229
|
+
}
|
|
230
|
+
const configs = await this.configGenerator.getBuildConfigs();
|
|
231
|
+
/**
|
|
232
|
+
* Checks if the result of the Vite build is a Rollup watcher.
|
|
233
|
+
* This should happen iff we're running `electron-forge start`.
|
|
234
|
+
*/
|
|
235
|
+
const isRollupWatcher = (x) => x &&
|
|
236
|
+
typeof x === 'object' &&
|
|
237
|
+
'on' in x &&
|
|
238
|
+
typeof x.on === 'function' &&
|
|
239
|
+
'close' in x &&
|
|
240
|
+
typeof x.close === 'function';
|
|
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
|
+
}
|
|
268
257
|
};
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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`,
|
|
273
270
|
task: async (_ctx, subtask) => {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
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);
|
|
277
325
|
});
|
|
278
|
-
await viteDevServer.listen();
|
|
279
|
-
const urls = getServerURLs(viteDevServer.resolvedUrls);
|
|
280
|
-
subtask.output = urls;
|
|
281
|
-
this.servers.push(viteDevServer);
|
|
282
|
-
if (viteDevServer.httpServer) {
|
|
283
|
-
// Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
|
|
284
|
-
const addressInfo = viteDevServer.httpServer.address();
|
|
285
|
-
const isAddressInfo = (x) => typeof x === 'object' ? typeof x?.address === 'string' : false;
|
|
286
|
-
if (isAddressInfo(addressInfo)) {
|
|
287
|
-
userConfig.server ??= {};
|
|
288
|
-
userConfig.server.port = addressInfo.port;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
326
|
},
|
|
292
|
-
|
|
293
|
-
|
|
327
|
+
};
|
|
328
|
+
}), {
|
|
329
|
+
concurrent: this.config.concurrent ?? true,
|
|
330
|
+
exitOnError: this.isProd,
|
|
331
|
+
});
|
|
332
|
+
};
|
|
333
|
+
// Renderer process
|
|
334
|
+
buildRenderer = async (task) => {
|
|
335
|
+
if (this.isProd) {
|
|
336
|
+
const targets = this.config.renderer
|
|
337
|
+
.map((spec, index) => ({ spec, index }))
|
|
338
|
+
.filter(({ spec }) => spec.config);
|
|
339
|
+
return task?.newListr(targets.map(({ spec, index }) => ({
|
|
340
|
+
title: `Building ${chalk.green(spec.name)}`,
|
|
341
|
+
task: async (_ctx, subtask) => {
|
|
342
|
+
await spawnViteBuild(this.serializableConfig, 'renderer', index, this.projectDir);
|
|
343
|
+
subtask.title = `Built target ${chalk.dim(spec.name)}`;
|
|
294
344
|
},
|
|
295
|
-
}))
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
345
|
+
})), {
|
|
346
|
+
concurrent: this.config.concurrent ?? true,
|
|
347
|
+
exitOnError: true,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
351
|
+
return task?.newListr(rendererConfigs.map((userConfig) => ({
|
|
352
|
+
task: async (_ctx, subtask) => {
|
|
353
|
+
await vite.build({
|
|
354
|
+
configFile: false,
|
|
355
|
+
logLevel: 'error',
|
|
356
|
+
...userConfig,
|
|
357
|
+
});
|
|
358
|
+
subtask.title = `Built target ${chalk.dim(path.basename(userConfig.build?.outDir ?? ''))}`;
|
|
359
|
+
},
|
|
360
|
+
})), {
|
|
361
|
+
concurrent: this.config.concurrent ?? true,
|
|
362
|
+
});
|
|
363
|
+
};
|
|
364
|
+
launchRendererDevServers = async (task) => {
|
|
365
|
+
const rendererConfigs = await this.configGenerator.getRendererConfig();
|
|
366
|
+
return task?.newListr(rendererConfigs.map((userConfig) => ({
|
|
367
|
+
title: `Target ${chalk.cyan(path.basename(userConfig.build?.outDir ?? ''))}`,
|
|
368
|
+
task: async (_ctx, subtask) => {
|
|
369
|
+
const viteDevServer = await vite.createServer({
|
|
370
|
+
configFile: false,
|
|
371
|
+
...userConfig,
|
|
372
|
+
});
|
|
373
|
+
await viteDevServer.listen();
|
|
374
|
+
const urls = getServerURLs(viteDevServer.resolvedUrls);
|
|
375
|
+
subtask.output = urls;
|
|
376
|
+
this.servers.push(viteDevServer);
|
|
377
|
+
if (viteDevServer.httpServer) {
|
|
378
|
+
// Make sure that `getDefines` in VitePlugin.ts gets the correct `server.port`. (#3198)
|
|
379
|
+
const addressInfo = viteDevServer.httpServer.address();
|
|
380
|
+
const isAddressInfo = (x) => typeof x === 'object' ? typeof x?.address === 'string' : false;
|
|
381
|
+
if (isAddressInfo(addressInfo)) {
|
|
382
|
+
userConfig.server ??= {};
|
|
383
|
+
userConfig.server.port = addressInfo.port;
|
|
384
|
+
}
|
|
308
385
|
}
|
|
309
|
-
|
|
386
|
+
},
|
|
387
|
+
rendererOptions: {
|
|
388
|
+
persistentOutput: true,
|
|
389
|
+
},
|
|
390
|
+
})));
|
|
391
|
+
};
|
|
392
|
+
exitHandler = (options, err) => {
|
|
393
|
+
d('handling process exit with:', options);
|
|
394
|
+
if (options.cleanup) {
|
|
395
|
+
for (const watcher of this.watchers) {
|
|
396
|
+
d('cleaning vite watcher');
|
|
397
|
+
watcher.close();
|
|
310
398
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
}
|
|
399
|
+
this.watchers = [];
|
|
400
|
+
for (const server of this.servers) {
|
|
401
|
+
d('cleaning http server');
|
|
402
|
+
server.close();
|
|
403
|
+
}
|
|
404
|
+
this.servers = [];
|
|
405
|
+
}
|
|
406
|
+
if (err)
|
|
407
|
+
console.error(err.stack);
|
|
408
|
+
if (options.exit)
|
|
409
|
+
process.exit(0);
|
|
410
|
+
};
|
|
324
411
|
}
|
|
325
|
-
exports.VitePlugin = VitePlugin;
|
|
326
|
-
VitePlugin.alreadyStarted = false;
|
|
327
|
-
exports.default = VitePlugin;
|
|
328
412
|
/**
|
|
329
413
|
* Get a string for Vite's printServerUrls function without actually printing it.
|
|
330
414
|
* Allows us to set `task.output` to that value without having to pass a custom logger into Vite.
|
|
@@ -332,19 +416,20 @@ exports.default = VitePlugin;
|
|
|
332
416
|
*/
|
|
333
417
|
function getServerURLs(urls) {
|
|
334
418
|
let output = '';
|
|
335
|
-
const colorUrl = (url) =>
|
|
419
|
+
const colorUrl = (url) => chalk.cyan(url.replace(/:(\d+)\//, (_, port) => `:${chalk.bold(port)}/`));
|
|
336
420
|
for (const url of urls.local) {
|
|
337
|
-
output += ` ${
|
|
421
|
+
output += ` ${chalk.green('➜')} ${chalk.bold('Local')}: ${colorUrl(url)}`;
|
|
338
422
|
}
|
|
339
423
|
for (const url of urls.network) {
|
|
340
|
-
output += ` \n${
|
|
424
|
+
output += ` \n${chalk.green('➜')} ${chalk.bold('Network')}: ${colorUrl(url)}`;
|
|
341
425
|
}
|
|
342
426
|
if (urls.network.length === 0) {
|
|
343
427
|
output +=
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
428
|
+
chalk.dim(` \n${chalk.green('➜')} ${chalk.bold('Network')}: use `) +
|
|
429
|
+
chalk.bold('--host') +
|
|
430
|
+
chalk.dim(' to expose');
|
|
347
431
|
}
|
|
348
432
|
return output;
|
|
349
433
|
}
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhFQUE4RTtBQUM5RSxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztBQUU3QywwREFBNkI7QUFFN0IsNkRBQThFO0FBQzlFLGtEQUEwQjtBQUMxQixrREFBMEI7QUFDMUIsd0RBQTBCO0FBQzFCLG1DQUE2QztBQUM3QyxnREFBdUM7QUFFdkMsOERBQStDO0FBVS9DLE1BQU0sQ0FBQyxHQUFHLElBQUEsZUFBSyxFQUFDLDRCQUE0QixDQUFDLENBQUM7QUFFOUMsTUFBcUIsVUFBVyxTQUFRLHdCQUE0QjtJQUFwRTs7UUFHUyxTQUFJLEdBQUcsTUFBTSxDQUFDO1FBRWIsV0FBTSxHQUFHLEtBQUssQ0FBQztRQWNmLGFBQVEsR0FBZ0MsRUFBRSxDQUFDO1FBRTNDLFlBQU8sR0FBeUIsRUFBRSxDQUFDO1FBRTNDLGdEQUFnRDtRQUN4QyxrQkFBYSxHQUFHLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUU7WUFDekQsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDLENBQUM7UUFFSCxTQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBMEIsRUFBRSxD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
|
|
434
|
+
export { VitePlugin };
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzFCLE9BQU8sRUFBUyxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsT0FBTyxtQkFBbUIsTUFBTSxpQkFBaUIsQ0FBQztBQVdsRCxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUU5QyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUNuQixzQkFBc0IsQ0FDdkIsQ0FBQztBQUVGLFNBQVMsY0FBYyxDQUNyQixZQUEwRCxFQUMxRCxJQUEwQixFQUMxQixLQUFhLEVBQ2IsVUFBa0I7SUFFbEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDNUQsR0FBRyxFQUFFLFVBQVU7WUFDZixHQUFHLEVBQUU7Z0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztnQkFDZCxzQkFBc0IsRUFBRSxVQUFVO2dCQUNsQyxlQUFlLEVBQUUsSUFBSTtnQkFDckIsZ0JBQWdCLEVBQUUs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
|