@electron-forge/plugin-vite 7.2.0 → 7.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Config.d.ts +4 -4
- package/dist/Config.d.ts.map +1 -1
- package/dist/ViteConfig.d.ts +4 -12
- package/dist/ViteConfig.d.ts.map +1 -1
- package/dist/ViteConfig.js +20 -71
- package/dist/VitePlugin.d.ts +6 -4
- package/dist/VitePlugin.d.ts.map +1 -1
- package/dist/VitePlugin.js +59 -20
- package/dist/util/package.d.ts +14 -0
- package/dist/util/package.d.ts.map +1 -0
- package/dist/util/package.js +93 -0
- package/dist/util/plugins.d.ts +1 -4
- package/dist/util/plugins.d.ts.map +1 -1
- package/dist/util/plugins.js +7 -31
- package/package.json +14 -13
- package/src/Config.ts +9 -4
- package/src/ViteConfig.ts +25 -84
- package/src/VitePlugin.ts +93 -46
- package/src/util/package.ts +108 -0
- package/src/util/plugins.ts +7 -31
package/dist/Config.d.ts
CHANGED
|
@@ -7,13 +7,13 @@ export interface VitePluginBuildConfig {
|
|
|
7
7
|
/**
|
|
8
8
|
* Vite config file path.
|
|
9
9
|
*/
|
|
10
|
-
config
|
|
10
|
+
config: string;
|
|
11
11
|
}
|
|
12
12
|
export interface VitePluginRendererConfig {
|
|
13
13
|
/**
|
|
14
|
-
* Human friendly name of your entry point
|
|
14
|
+
* Human friendly name of your entry point.
|
|
15
15
|
*/
|
|
16
|
-
name
|
|
16
|
+
name?: string;
|
|
17
17
|
/**
|
|
18
18
|
* Vite config file path.
|
|
19
19
|
*/
|
|
@@ -25,7 +25,7 @@ export interface VitePluginConfig {
|
|
|
25
25
|
*/
|
|
26
26
|
build: VitePluginBuildConfig[];
|
|
27
27
|
/**
|
|
28
|
-
* Renderer process.
|
|
28
|
+
* Renderer process Vite configs.
|
|
29
29
|
*/
|
|
30
30
|
renderer: VitePluginRendererConfig[];
|
|
31
31
|
}
|
package/dist/Config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAK/B;;OAEG;IACH,KAAK,EAAE,qBAAqB,EAAE,CAAC;IAC/B;;OAEG;IACH,QAAQ,EAAE,wBAAwB,EAAE,CAAC;CACtC"}
|
package/dist/ViteConfig.d.ts
CHANGED
|
@@ -1,25 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
/**
|
|
4
|
-
* Vite allows zero-config runs, if the user does not provide `vite.config.js`,
|
|
5
|
-
* then the value of `LoadResult` will become `null`.
|
|
6
|
-
*/
|
|
7
|
-
export declare type LoadResult = Awaited<ReturnType<typeof loadConfigFromFile>>;
|
|
1
|
+
import type { VitePluginBuildConfig, VitePluginConfig, VitePluginRendererConfig } from './Config';
|
|
2
|
+
import type { ConfigEnv, UserConfig } from 'vite';
|
|
8
3
|
export default class ViteConfigGenerator {
|
|
9
4
|
private readonly pluginConfig;
|
|
10
5
|
private readonly projectDir;
|
|
11
6
|
private readonly isProd;
|
|
12
|
-
private readonly baseDir;
|
|
13
|
-
private rendererConfigCache;
|
|
14
7
|
constructor(pluginConfig: VitePluginConfig, projectDir: string, isProd: boolean);
|
|
15
|
-
resolveConfig(
|
|
8
|
+
resolveConfig(buildConfig: VitePluginBuildConfig | VitePluginRendererConfig, configEnv?: Partial<ConfigEnv>): Promise<{
|
|
16
9
|
path: string;
|
|
17
10
|
config: UserConfig;
|
|
18
11
|
dependencies: string[];
|
|
19
12
|
} | null>;
|
|
20
13
|
get mode(): string;
|
|
21
|
-
|
|
22
|
-
getBuildConfig(watch?: boolean): Promise<UserConfig[]>;
|
|
14
|
+
getBuildConfig(): Promise<UserConfig[]>;
|
|
23
15
|
getRendererConfig(): Promise<UserConfig[]>;
|
|
24
16
|
}
|
|
25
17
|
//# sourceMappingURL=ViteConfig.d.ts.map
|
package/dist/ViteConfig.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViteConfig.d.ts","sourceRoot":"","sources":["../src/ViteConfig.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ViteConfig.d.ts","sourceRoot":"","sources":["../src/ViteConfig.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAElG,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAIlD,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;IAIlI,aAAa,CAAC,WAAW,EAAE,qBAAqB,GAAG,wBAAwB,EAAE,SAAS,GAAE,OAAO,CAAC,SAAS,CAAM;;;;;IAiB/G,IAAI,IAAI,IAAI,MAAM,CAKjB;IAEK,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAavC,iBAAiB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAWjD"}
|
package/dist/ViteConfig.js
CHANGED
|
@@ -3,26 +3,30 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
7
6
|
const debug_1 = __importDefault(require("debug"));
|
|
7
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
8
8
|
const vite_1 = require("vite");
|
|
9
|
-
const
|
|
10
|
-
const d = (0, debug_1.default)('electron-forge:plugin:vite:viteconfig');
|
|
9
|
+
const d = (0, debug_1.default)('@electron-forge/plugin-vite:ViteConfig');
|
|
11
10
|
class ViteConfigGenerator {
|
|
12
11
|
constructor(pluginConfig, projectDir, isProd) {
|
|
13
12
|
this.pluginConfig = pluginConfig;
|
|
14
13
|
this.projectDir = projectDir;
|
|
15
14
|
this.isProd = isProd;
|
|
16
|
-
this.baseDir = node_path_1.default.join(projectDir, '.vite');
|
|
17
15
|
d('Config mode:', this.mode);
|
|
18
16
|
}
|
|
19
|
-
resolveConfig(
|
|
20
|
-
// `command` is to be passed as an arguments when the user export a function in `vite.config.js`.
|
|
17
|
+
resolveConfig(buildConfig, configEnv = {}) {
|
|
21
18
|
// @see - https://vitejs.dev/config/#conditional-config
|
|
22
19
|
configEnv.command ??= this.isProd ? 'build' : 'serve';
|
|
23
|
-
// `mode` affects `.env.[mode]` file
|
|
20
|
+
// `mode` affects `.env.[mode]` file load.
|
|
24
21
|
configEnv.mode ??= this.mode;
|
|
25
|
-
|
|
22
|
+
// Hack! Pass the forge runtime config to the vite config file in the template.
|
|
23
|
+
Object.assign(configEnv, {
|
|
24
|
+
root: this.projectDir,
|
|
25
|
+
forgeConfig: this.pluginConfig,
|
|
26
|
+
forgeConfigSelf: buildConfig,
|
|
27
|
+
});
|
|
28
|
+
// `configEnv` is to be passed as an arguments when the user export a function in `vite.config.js`.
|
|
29
|
+
return (0, vite_1.loadConfigFromFile)(configEnv, buildConfig.config);
|
|
26
30
|
}
|
|
27
31
|
get mode() {
|
|
28
32
|
// Vite's `mode` can be passed in via command.
|
|
@@ -30,80 +34,25 @@ class ViteConfigGenerator {
|
|
|
30
34
|
// The `mode` set by the end user in `vite.config.js` has a higher priority.
|
|
31
35
|
return this.isProd ? 'production' : 'development';
|
|
32
36
|
}
|
|
33
|
-
async
|
|
34
|
-
const defines = {};
|
|
35
|
-
const rendererConfigs = await this.getRendererConfig();
|
|
36
|
-
for (const [index, userConfig] of rendererConfigs.entries()) {
|
|
37
|
-
const name = this.pluginConfig.renderer[index].name;
|
|
38
|
-
if (!name) {
|
|
39
|
-
continue;
|
|
40
|
-
}
|
|
41
|
-
const NAME = name.toUpperCase().replace(/ /g, '_');
|
|
42
|
-
// `server.port` is set in `launchRendererDevServers` in `VitePlugin.ts`.
|
|
43
|
-
defines[`${NAME}_VITE_DEV_SERVER_URL`] = this.isProd ? undefined : JSON.stringify(`http://localhost:${userConfig?.server?.port}`);
|
|
44
|
-
defines[`${NAME}_VITE_NAME`] = JSON.stringify(name);
|
|
45
|
-
}
|
|
46
|
-
return defines;
|
|
47
|
-
}
|
|
48
|
-
async getBuildConfig(watch = false) {
|
|
37
|
+
async getBuildConfig() {
|
|
49
38
|
if (!Array.isArray(this.pluginConfig.build)) {
|
|
50
39
|
throw new Error('"config.build" must be an Array');
|
|
51
40
|
}
|
|
52
|
-
const define = await this.getDefines();
|
|
53
|
-
const plugins = [(0, plugins_1.externalBuiltins)()];
|
|
54
41
|
const configs = this.pluginConfig.build
|
|
55
|
-
|
|
56
|
-
.
|
|
57
|
-
|
|
58
|
-
// Ensure that each build config loads the .env file correctly.
|
|
59
|
-
mode: this.mode,
|
|
60
|
-
build: {
|
|
61
|
-
lib: entry
|
|
62
|
-
? {
|
|
63
|
-
entry,
|
|
64
|
-
// Electron can only support cjs.
|
|
65
|
-
formats: ['cjs'],
|
|
66
|
-
fileName: () => '[name].js',
|
|
67
|
-
}
|
|
68
|
-
: undefined,
|
|
69
|
-
// Prevent multiple builds from interfering with each other.
|
|
70
|
-
emptyOutDir: false,
|
|
71
|
-
// 🚧 Multiple builds may conflict.
|
|
72
|
-
outDir: node_path_1.default.join(this.baseDir, 'build'),
|
|
73
|
-
watch: watch ? {} : undefined,
|
|
74
|
-
},
|
|
75
|
-
clearScreen: false,
|
|
76
|
-
define,
|
|
77
|
-
plugins,
|
|
78
|
-
};
|
|
79
|
-
if (config) {
|
|
80
|
-
const loadResult = await this.resolveConfig(config);
|
|
81
|
-
return (0, vite_1.mergeConfig)(defaultConfig, loadResult?.config ?? {});
|
|
82
|
-
}
|
|
83
|
-
return defaultConfig;
|
|
84
|
-
});
|
|
42
|
+
// Prevent load the default `vite.config.js` file.
|
|
43
|
+
.filter(({ config }) => config)
|
|
44
|
+
.map(async (buildConfig) => (await this.resolveConfig(buildConfig))?.config ?? {});
|
|
85
45
|
return await Promise.all(configs);
|
|
86
46
|
}
|
|
87
47
|
async getRendererConfig() {
|
|
88
48
|
if (!Array.isArray(this.pluginConfig.renderer)) {
|
|
89
49
|
throw new Error('"config.renderer" must be an Array');
|
|
90
50
|
}
|
|
91
|
-
const configs =
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
mode: this.mode,
|
|
95
|
-
// Make sure that Electron can be loaded into the local file using `loadFile` after packaging.
|
|
96
|
-
base: './',
|
|
97
|
-
build: {
|
|
98
|
-
outDir: node_path_1.default.join(this.baseDir, 'renderer', name),
|
|
99
|
-
},
|
|
100
|
-
clearScreen: false,
|
|
101
|
-
};
|
|
102
|
-
const loadResult = (await this.resolveConfig(config)) ?? { path: '', config: {}, dependencies: [] };
|
|
103
|
-
return (0, vite_1.mergeConfig)(defaultConfig, loadResult.config);
|
|
104
|
-
}));
|
|
51
|
+
const configs = this.pluginConfig.renderer
|
|
52
|
+
.filter(({ config }) => config)
|
|
53
|
+
.map(async (buildConfig) => (await this.resolveConfig(buildConfig))?.config ?? {});
|
|
105
54
|
return await Promise.all(configs);
|
|
106
55
|
}
|
|
107
56
|
}
|
|
108
57
|
exports.default = ViteConfigGenerator;
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZUNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLHNEQUFzRDtBQUN0RCwrQkFBMEM7QUFNMUMsTUFBTSxDQUFDLEdBQUcsSUFBQSxlQUFLLEVBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUUxRCxNQUFxQixtQkFBbUI7SUFDdEMsWUFBNkIsWUFBOEIsRUFBbUIsVUFBa0IsRUFBbUIsTUFBZTtRQUFyRyxpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFBbUIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFtQixXQUFNLEdBQU4sTUFBTSxDQUFTO1FBQ2hJLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsV0FBNkQsRUFBRSxZQUFnQyxFQUFFO1FBQzdHLHVEQUF1RDtRQUN2RCxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3RELDBDQUEwQztRQUMxQyxTQUFTLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7UUFFN0IsK0VBQStFO1FBQy9FLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVTtZQUNyQixXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDOUIsZUFBZSxFQUFFLFdBQVc7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsbUdBQW1HO1FBQ25HLE9BQU8sSUFBQSx5QkFBa0IsRUFBQyxTQUFzQixFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sOENBQThDO1FBQzlDLGlIQUFpSDtRQUNqSCw0RUFBNEU7UUFDNUUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUs7WUFDckMsa0RBQWtEO2FBQ2pELE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQXNCLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTFHLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRO2FBQ3ZDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUM5QixHQUFHLENBQXNCLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTFHLE9BQU8sTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQXJERCxzQ0FxREMifQ==
|
package/dist/VitePlugin.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PluginBase } from '@electron-forge/plugin-base';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import type { VitePluginConfig } from './Config';
|
|
3
|
+
import type { ForgeMultiHookMap, ResolvedForgeConfig, StartResult } from '@electron-forge/shared-types';
|
|
4
4
|
export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
5
5
|
private static alreadyStarted;
|
|
6
6
|
name: string;
|
|
@@ -11,11 +11,13 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
11
11
|
private watchers;
|
|
12
12
|
private servers;
|
|
13
13
|
init: (dir: string) => void;
|
|
14
|
-
|
|
14
|
+
setDirectories(dir: string): void;
|
|
15
15
|
private get configGenerator();
|
|
16
16
|
getHooks: () => ForgeMultiHookMap;
|
|
17
|
+
resolveForgeConfig: (forgeConfig: ResolvedForgeConfig) => Promise<ResolvedForgeConfig>;
|
|
18
|
+
packageAfterCopy: (_forgeConfig: ResolvedForgeConfig, buildPath: string) => Promise<void>;
|
|
17
19
|
startLogic: () => Promise<StartResult>;
|
|
18
|
-
build: (
|
|
20
|
+
build: () => Promise<void>;
|
|
19
21
|
buildRenderer: () => Promise<void>;
|
|
20
22
|
launchRendererDevServers: () => Promise<void>;
|
|
21
23
|
exitHandler: (options: {
|
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":"AAEA,OAAO,EAAuB,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAW9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAOxG,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;IAGvB,OAAO,CAAC,UAAU,CAAU;IAG5B,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,oBAAoB,CAAuB;IAEnD,OAAO,CAAC,QAAQ,CAAuB;IAEvC,OAAO,CAAC,OAAO,CAA4B;IAE3C,IAAI,QAAS,MAAM,KAAG,IAAI,CAMxB;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxC,OAAO,KAAK,eAAe,GAE1B;IAED,QAAQ,QAAO,iBAAiB,CAoB9B;IAEF,kBAAkB,gBAAuB,mBAAmB,KAAG,QAAQ,mBAAmB,CAAC,CAsBzF;IAEF,gBAAgB,iBAAwB,mBAAmB,aAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CAsB5F;IAEF,UAAU,QAAa,QAAQ,WAAW,CAAC,CA+BzC;IAGF,KAAK,QAAa,QAAQ,IAAI,CAAC,CA4B7B;IAGF,aAAa,QAAa,QAAQ,IAAI,CAAC,CAOrC;IAEF,wBAAwB,QAAa,QAAQ,IAAI,CAAC,CAuBhD;IAEF,WAAW,YAAa;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,8BAAgB,IAAI,CAmB/E;CACH;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/dist/VitePlugin.js
CHANGED
|
@@ -4,11 +4,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.VitePlugin = void 0;
|
|
7
|
-
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
8
|
const plugin_base_1 = require("@electron-forge/plugin-base");
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
10
|
const debug_1 = __importDefault(require("debug"));
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
11
13
|
const vite_1 = __importDefault(require("vite"));
|
|
14
|
+
const package_1 = require("./util/package");
|
|
15
|
+
const plugins_1 = require("./util/plugins");
|
|
12
16
|
const ViteConfig_1 = __importDefault(require("./ViteConfig"));
|
|
13
17
|
const d = (0, debug_1.default)('electron-forge:plugin:vite');
|
|
14
18
|
class VitePlugin extends plugin_base_1.PluginBase {
|
|
@@ -29,7 +33,7 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
29
33
|
prePackage: [
|
|
30
34
|
(0, plugin_base_1.namedHookWithTaskFn)(async () => {
|
|
31
35
|
this.isProd = true;
|
|
32
|
-
await
|
|
36
|
+
await fs_extra_1.default.remove(this.baseDir);
|
|
33
37
|
await Promise.all([this.build(), this.buildRenderer()]);
|
|
34
38
|
}, 'Building vite bundles'),
|
|
35
39
|
],
|
|
@@ -41,13 +45,53 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
41
45
|
this.exitHandler({ cleanup: true, exit: true });
|
|
42
46
|
});
|
|
43
47
|
},
|
|
48
|
+
resolveForgeConfig: this.resolveForgeConfig,
|
|
49
|
+
packageAfterCopy: this.packageAfterCopy,
|
|
44
50
|
};
|
|
45
51
|
};
|
|
52
|
+
this.resolveForgeConfig = async (forgeConfig) => {
|
|
53
|
+
forgeConfig.packagerConfig ??= {};
|
|
54
|
+
if (forgeConfig.packagerConfig.ignore) {
|
|
55
|
+
if (typeof forgeConfig.packagerConfig.ignore !== 'function') {
|
|
56
|
+
console.error(chalk_1.default.yellow(`You have set packagerConfig.ignore, the Electron Forge Vite plugin normally sets this automatically.
|
|
57
|
+
|
|
58
|
+
Your packaged app may be larger than expected if you dont ignore everything other than the '.vite' folder`));
|
|
59
|
+
}
|
|
60
|
+
return forgeConfig;
|
|
61
|
+
}
|
|
62
|
+
forgeConfig.packagerConfig.ignore = (file) => {
|
|
63
|
+
if (!file)
|
|
64
|
+
return false;
|
|
65
|
+
// Always starts with `/`
|
|
66
|
+
// @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
|
|
67
|
+
return !file.startsWith('/.vite');
|
|
68
|
+
};
|
|
69
|
+
return forgeConfig;
|
|
70
|
+
};
|
|
71
|
+
this.packageAfterCopy = async (_forgeConfig, buildPath) => {
|
|
72
|
+
const pj = await fs_extra_1.default.readJson(node_path_1.default.resolve(this.projectDir, 'package.json'));
|
|
73
|
+
const flatDependencies = await (0, package_1.getFlatDependencies)(this.projectDir);
|
|
74
|
+
if (!pj.main?.includes('.vite/')) {
|
|
75
|
+
throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
|
|
76
|
+
"main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
|
|
77
|
+
the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
78
|
+
}
|
|
79
|
+
if (pj.config) {
|
|
80
|
+
delete pj.config.forge;
|
|
81
|
+
}
|
|
82
|
+
await fs_extra_1.default.writeJson(node_path_1.default.resolve(buildPath, 'package.json'), pj, {
|
|
83
|
+
spaces: 2,
|
|
84
|
+
});
|
|
85
|
+
// Copy the dependencies in package.json
|
|
86
|
+
for (const dep of flatDependencies) {
|
|
87
|
+
await fs_extra_1.default.copy(dep.src, node_path_1.default.resolve(buildPath, dep.dest));
|
|
88
|
+
}
|
|
89
|
+
};
|
|
46
90
|
this.startLogic = async () => {
|
|
47
91
|
if (VitePlugin.alreadyStarted)
|
|
48
92
|
return false;
|
|
49
93
|
VitePlugin.alreadyStarted = true;
|
|
50
|
-
await
|
|
94
|
+
await fs_extra_1.default.remove(this.baseDir);
|
|
51
95
|
return {
|
|
52
96
|
tasks: [
|
|
53
97
|
{
|
|
@@ -64,7 +108,7 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
64
108
|
{
|
|
65
109
|
title: 'Compiling main process code',
|
|
66
110
|
task: async () => {
|
|
67
|
-
await this.build(
|
|
111
|
+
await this.build();
|
|
68
112
|
},
|
|
69
113
|
options: {
|
|
70
114
|
showTimer: true,
|
|
@@ -75,27 +119,20 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
75
119
|
};
|
|
76
120
|
};
|
|
77
121
|
// Main process, Preload scripts and Worker process, etc.
|
|
78
|
-
this.build = async (
|
|
79
|
-
|
|
80
|
-
|
|
122
|
+
this.build = async () => {
|
|
123
|
+
const configs = await this.configGenerator.getBuildConfig();
|
|
124
|
+
const buildTasks = [];
|
|
125
|
+
const isWatcher = (x) => typeof x?.close === 'function';
|
|
126
|
+
for (const userConfig of configs) {
|
|
127
|
+
const buildTask = new Promise((resolve, reject) => {
|
|
81
128
|
vite_1.default
|
|
82
129
|
.build({
|
|
83
130
|
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
84
131
|
configFile: false,
|
|
85
132
|
...userConfig,
|
|
86
|
-
plugins: [
|
|
87
|
-
{
|
|
88
|
-
name: '@electron-forge/plugin-vite:start',
|
|
89
|
-
closeBundle() {
|
|
90
|
-
resolve();
|
|
91
|
-
// TODO: implement hot-restart here
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
...(userConfig.plugins ?? []),
|
|
95
|
-
],
|
|
133
|
+
plugins: [(0, plugins_1.onBuildDone)(resolve), ...(userConfig.plugins ?? [])],
|
|
96
134
|
})
|
|
97
135
|
.then((result) => {
|
|
98
|
-
const isWatcher = (x) => typeof x?.close === 'function';
|
|
99
136
|
if (isWatcher(result)) {
|
|
100
137
|
this.watchers.push(result);
|
|
101
138
|
}
|
|
@@ -103,7 +140,9 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
103
140
|
})
|
|
104
141
|
.catch(reject);
|
|
105
142
|
});
|
|
106
|
-
|
|
143
|
+
buildTasks.push(buildTask);
|
|
144
|
+
}
|
|
145
|
+
await Promise.all(buildTasks);
|
|
107
146
|
};
|
|
108
147
|
// Renderer process
|
|
109
148
|
this.buildRenderer = async () => {
|
|
@@ -167,4 +206,4 @@ class VitePlugin extends plugin_base_1.PluginBase {
|
|
|
167
206
|
exports.default = VitePlugin;
|
|
168
207
|
exports.VitePlugin = VitePlugin;
|
|
169
208
|
VitePlugin.alreadyStarted = false;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUE2QjtBQUU3Qiw2REFBOEU7QUFDOUUsa0RBQTBCO0FBQzFCLGtEQUEwQjtBQUMxQix3REFBMEI7QUFDMUIsc0RBQXNEO0FBQ3RELGdEQUF1QztBQUV2Qyw0Q0FBcUQ7QUFDckQsNENBQTZDO0FBQzdDLDhEQUErQztBQVEvQyxNQUFNLENBQUMsR0FBRyxJQUFBLGVBQUssRUFBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBRTlDLE1BQXFCLFVBQVcsU0FBUSx3QkFBNEI7SUFBcEU7O1FBR1MsU0FBSSxHQUFHLE1BQU0sQ0FBQztRQUViLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFVZixhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQUUvQixZQUFPLEdBQXlCLEVBQUUsQ0FBQztRQUUzQyxTQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQVEsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXpCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRSxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQTBCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLENBQUMsQ0FBQztRQVdGLGFBQVEsR0FBRyxHQUFzQixFQUFFO1lBQ2pDLE9BQU87Z0JBQ0wsVUFBVSxFQUFFO29CQUNWLElBQUEsaUNBQW1CLEVBQWUsS0FBSyxJQUFJLEVBQUU7d0JB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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Dependency {
|
|
2
|
+
name: string;
|
|
3
|
+
path: SourceAndDestination;
|
|
4
|
+
dependencies: Dependency[];
|
|
5
|
+
}
|
|
6
|
+
export interface SourceAndDestination {
|
|
7
|
+
src: string;
|
|
8
|
+
dest: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function isDirectory(p: string): Promise<boolean>;
|
|
11
|
+
export declare function lookupNodeModulesPaths(root: string, paths?: string[]): Promise<string[]>;
|
|
12
|
+
export declare function resolveDependencies(root: string): Promise<Dependency[]>;
|
|
13
|
+
export declare function getFlatDependencies(root?: string): Promise<SourceAndDestination[]>;
|
|
14
|
+
//# sourceMappingURL=package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../src/util/package.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,oBAAoB,CAAC;IAC3B,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAOD,wBAAsB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO7D;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAYlG;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,yBAmDrD;AAED,wBAAsB,mBAAmB,CAAC,IAAI,SAAgB,mCAW7D"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getFlatDependencies = exports.resolveDependencies = exports.lookupNodeModulesPaths = exports.isDirectory = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
function isRootPath(dir) {
|
|
10
|
+
// *unix or Windows root path
|
|
11
|
+
return dir === '/' || /^[a-zA-Z]:\\$/i.test(dir);
|
|
12
|
+
}
|
|
13
|
+
async function isDirectory(p) {
|
|
14
|
+
try {
|
|
15
|
+
const stat = await fs_extra_1.default.promises.stat(p);
|
|
16
|
+
return stat.isDirectory();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.isDirectory = isDirectory;
|
|
23
|
+
async function lookupNodeModulesPaths(root, paths = []) {
|
|
24
|
+
if (!root)
|
|
25
|
+
return paths;
|
|
26
|
+
if (!node_path_1.default.isAbsolute(root))
|
|
27
|
+
return paths;
|
|
28
|
+
const p = node_path_1.default.join(root, 'node_modules');
|
|
29
|
+
if (await isDirectory(p)) {
|
|
30
|
+
paths = paths.concat(p);
|
|
31
|
+
}
|
|
32
|
+
root = node_path_1.default.join(root, '..');
|
|
33
|
+
return isRootPath(root) ? paths : await lookupNodeModulesPaths(root, paths);
|
|
34
|
+
}
|
|
35
|
+
exports.lookupNodeModulesPaths = lookupNodeModulesPaths;
|
|
36
|
+
async function resolveDependencies(root) {
|
|
37
|
+
const rootDependencies = Object.keys((await fs_extra_1.default.readJson(node_path_1.default.join(root, 'package.json'))).dependencies || {});
|
|
38
|
+
const resolve = async (prePath, dependencies, collected = new Map()) => await Promise.all(dependencies.map(async (name) => {
|
|
39
|
+
let curPath = prePath, depPath = null, packageJson = null;
|
|
40
|
+
while (!packageJson && !isRootPath(curPath)) {
|
|
41
|
+
const allNodeModules = await lookupNodeModulesPaths(curPath);
|
|
42
|
+
for (const nodeModules of allNodeModules) {
|
|
43
|
+
depPath = node_path_1.default.join(nodeModules, name);
|
|
44
|
+
if (await fs_extra_1.default.pathExists(depPath))
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
if (depPath) {
|
|
48
|
+
try {
|
|
49
|
+
packageJson = await fs_extra_1.default.readJson(node_path_1.default.join(depPath, 'package.json'));
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
// lookup node_modules
|
|
53
|
+
curPath = node_path_1.default.join(curPath, '..');
|
|
54
|
+
if (curPath.length < root.length) {
|
|
55
|
+
console.error(`not found 'node_modules' in root path: ${root}`);
|
|
56
|
+
throw err;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!depPath || !packageJson) {
|
|
62
|
+
throw new Error(`find dependencies error in: ${curPath}`);
|
|
63
|
+
}
|
|
64
|
+
const result = {
|
|
65
|
+
name,
|
|
66
|
+
path: {
|
|
67
|
+
src: depPath,
|
|
68
|
+
dest: node_path_1.default.relative(root, depPath),
|
|
69
|
+
},
|
|
70
|
+
dependencies: [],
|
|
71
|
+
};
|
|
72
|
+
const shouldResolveDeps = !collected.has(depPath);
|
|
73
|
+
collected.set(depPath, result);
|
|
74
|
+
if (shouldResolveDeps) {
|
|
75
|
+
result.dependencies = await resolve(depPath, Object.keys(packageJson.dependencies || {}), collected);
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}));
|
|
79
|
+
return resolve(root, rootDependencies);
|
|
80
|
+
}
|
|
81
|
+
exports.resolveDependencies = resolveDependencies;
|
|
82
|
+
async function getFlatDependencies(root = process.cwd()) {
|
|
83
|
+
const depsTree = await resolveDependencies(root);
|
|
84
|
+
const depsFlat = new Map();
|
|
85
|
+
const flatten = (dep) => {
|
|
86
|
+
depsFlat.set(dep.path.src, dep.path); // dedup
|
|
87
|
+
dep.dependencies.forEach(flatten);
|
|
88
|
+
};
|
|
89
|
+
depsTree.forEach(flatten);
|
|
90
|
+
return [...depsFlat.values()];
|
|
91
|
+
}
|
|
92
|
+
exports.getFlatDependencies = getFlatDependencies;
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BhY2thZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQTZCO0FBRTdCLHdEQUEwQjtBQWExQixTQUFTLFVBQVUsQ0FBQyxHQUFXO0lBQzdCLDZCQUE2QjtJQUM3QixPQUFPLEdBQUcsS0FBSyxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFTSxLQUFLLFVBQVUsV0FBVyxDQUFDLENBQVM7SUFDekMsSUFBSTtRQUNGLE1BQU0sSUFBSSxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzNCO0lBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7QUFDSCxDQUFDO0FBUEQsa0NBT0M7QUFFTSxLQUFLLFVBQVUsc0JBQXNCLENBQUMsSUFBWSxFQUFFLFFBQWtCLEVBQUU7SUFDN0UsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4QixJQUFJLENBQUMsbUJBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFFekMsTUFBTSxDQUFDLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRTFDLElBQUksTUFBTSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDekI7SUFDRCxJQUFJLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTdCLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxL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
|
package/dist/util/plugins.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
1
|
import type { Plugin } from 'vite';
|
|
2
|
-
|
|
3
|
-
* `electron` and Node.js built-in modules should always be externalize.
|
|
4
|
-
*/
|
|
5
|
-
export declare function externalBuiltins(): Plugin;
|
|
2
|
+
export declare function onBuildDone(callback: () => void): Plugin<any>;
|
|
6
3
|
//# sourceMappingURL=plugins.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/util/plugins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/util/plugins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,eAO/C"}
|
package/dist/util/plugins.js
CHANGED
|
@@ -1,37 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* `electron` and Node.js built-in modules should always be externalize.
|
|
7
|
-
*/
|
|
8
|
-
function externalBuiltins() {
|
|
3
|
+
exports.onBuildDone = void 0;
|
|
4
|
+
function onBuildDone(callback) {
|
|
9
5
|
return {
|
|
10
|
-
name: '@electron-forge/plugin-vite:
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const builtins = ['electron', ...nativeModules, ...nativeModules.map((m) => `node:${m}`)];
|
|
14
|
-
config.build ??= {};
|
|
15
|
-
config.build.rollupOptions ??= {};
|
|
16
|
-
let external = config.build.rollupOptions.external;
|
|
17
|
-
if (Array.isArray(external) || typeof external === 'string' || external instanceof RegExp) {
|
|
18
|
-
external = builtins.concat(external);
|
|
19
|
-
}
|
|
20
|
-
else if (typeof external === 'function') {
|
|
21
|
-
const original = external;
|
|
22
|
-
external = function (source, importer, isResolved) {
|
|
23
|
-
if (builtins.includes(source)) {
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
return original(source, importer, isResolved);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
external = builtins;
|
|
31
|
-
}
|
|
32
|
-
config.build.rollupOptions.external = external;
|
|
6
|
+
name: '@electron-forge/plugin-vite:build-done',
|
|
7
|
+
closeBundle() {
|
|
8
|
+
callback();
|
|
33
9
|
},
|
|
34
10
|
};
|
|
35
11
|
}
|
|
36
|
-
exports.
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
exports.onBuildDone = onBuildDone;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EsU0FBZ0IsV0FBVyxDQUFDLFFBQW9CO0lBQzlDLE9BQU87UUFDTCxJQUFJLEVBQUUsd0NBQXdDO1FBQzlDLFdBQVc7WUFDVCxRQUFRLEVBQUUsQ0FBQztRQUNiLENBQUM7S0FDUSxDQUFDO0FBQ2QsQ0FBQztBQVBELGtDQU9DIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@electron-forge/plugin-vite",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.3.1",
|
|
4
4
|
"description": "Vite plugin for Electron Forge, lets you use Vite directly in your tooling",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,29 +12,30 @@
|
|
|
12
12
|
"main": "dist/VitePlugin.js",
|
|
13
13
|
"typings": "dist/VitePlugin.d.ts",
|
|
14
14
|
"scripts": {
|
|
15
|
-
"test": "xvfb-maybe mocha --config ../../../.mocharc.js test/**/*_spec.ts"
|
|
15
|
+
"test": "xvfb-maybe mocha --config ../../../.mocharc.js test/**/*_spec.ts test/*_spec.ts"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@electron-forge/core-utils": "7.3.1",
|
|
19
|
+
"@electron-forge/plugin-base": "7.3.1",
|
|
20
|
+
"@electron-forge/shared-types": "7.3.1",
|
|
21
|
+
"@electron-forge/web-multi-logger": "7.3.1",
|
|
22
|
+
"chalk": "^4.0.0",
|
|
23
|
+
"debug": "^4.3.1",
|
|
24
|
+
"fs-extra": "^10.0.0"
|
|
16
25
|
},
|
|
17
26
|
"devDependencies": {
|
|
27
|
+
"@electron/packager": "^18.1.3",
|
|
18
28
|
"@malept/cross-spawn-promise": "^2.0.0",
|
|
19
29
|
"@types/node": "^18.0.3",
|
|
20
30
|
"chai": "^4.3.3",
|
|
21
|
-
"fs-extra": "^10.0.0",
|
|
22
31
|
"mocha": "^9.0.1",
|
|
32
|
+
"vite": "^5.0.12",
|
|
23
33
|
"which": "^2.0.2",
|
|
24
34
|
"xvfb-maybe": "^0.2.1"
|
|
25
35
|
},
|
|
26
36
|
"engines": {
|
|
27
37
|
"node": ">= 16.4.0"
|
|
28
38
|
},
|
|
29
|
-
"dependencies": {
|
|
30
|
-
"@electron-forge/core-utils": "7.2.0",
|
|
31
|
-
"@electron-forge/plugin-base": "7.2.0",
|
|
32
|
-
"@electron-forge/shared-types": "7.2.0",
|
|
33
|
-
"@electron-forge/web-multi-logger": "7.2.0",
|
|
34
|
-
"chalk": "^4.0.0",
|
|
35
|
-
"debug": "^4.3.1",
|
|
36
|
-
"vite": "^4.1.1"
|
|
37
|
-
},
|
|
38
39
|
"publishConfig": {
|
|
39
40
|
"access": "public"
|
|
40
41
|
},
|
|
@@ -42,5 +43,5 @@
|
|
|
42
43
|
"dist",
|
|
43
44
|
"src"
|
|
44
45
|
],
|
|
45
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "ccf606325817a6f066ac3de261851349384a6750"
|
|
46
47
|
}
|
package/src/Config.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
1
2
|
import type { LibraryOptions } from 'vite';
|
|
2
3
|
|
|
3
4
|
export interface VitePluginBuildConfig {
|
|
@@ -8,14 +9,14 @@ export interface VitePluginBuildConfig {
|
|
|
8
9
|
/**
|
|
9
10
|
* Vite config file path.
|
|
10
11
|
*/
|
|
11
|
-
config
|
|
12
|
+
config: string;
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
export interface VitePluginRendererConfig {
|
|
15
16
|
/**
|
|
16
|
-
* Human friendly name of your entry point
|
|
17
|
+
* Human friendly name of your entry point.
|
|
17
18
|
*/
|
|
18
|
-
name
|
|
19
|
+
name?: string;
|
|
19
20
|
/**
|
|
20
21
|
* Vite config file path.
|
|
21
22
|
*/
|
|
@@ -23,12 +24,16 @@ export interface VitePluginRendererConfig {
|
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export interface VitePluginConfig {
|
|
27
|
+
// Reserved option, may support modification in the future.
|
|
28
|
+
// @defaultValue '.vite'
|
|
29
|
+
// baseDir?: string;
|
|
30
|
+
|
|
26
31
|
/**
|
|
27
32
|
* Build anything such as Main process, Preload scripts and Worker process, etc.
|
|
28
33
|
*/
|
|
29
34
|
build: VitePluginBuildConfig[];
|
|
30
35
|
/**
|
|
31
|
-
* Renderer process.
|
|
36
|
+
* Renderer process Vite configs.
|
|
32
37
|
*/
|
|
33
38
|
renderer: VitePluginRendererConfig[];
|
|
34
39
|
}
|
package/src/ViteConfig.ts
CHANGED
|
@@ -1,36 +1,33 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
|
|
3
1
|
import debug from 'debug';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { VitePluginConfig } from './Config';
|
|
7
|
-
import { externalBuiltins } from './util/plugins';
|
|
2
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
3
|
+
import { loadConfigFromFile } from 'vite';
|
|
8
4
|
|
|
9
|
-
|
|
5
|
+
import type { VitePluginBuildConfig, VitePluginConfig, VitePluginRendererConfig } from './Config';
|
|
6
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
7
|
+
import type { ConfigEnv, UserConfig } from 'vite';
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
* Vite allows zero-config runs, if the user does not provide `vite.config.js`,
|
|
13
|
-
* then the value of `LoadResult` will become `null`.
|
|
14
|
-
*/
|
|
15
|
-
export type LoadResult = Awaited<ReturnType<typeof loadConfigFromFile>>;
|
|
9
|
+
const d = debug('@electron-forge/plugin-vite:ViteConfig');
|
|
16
10
|
|
|
17
11
|
export default class ViteConfigGenerator {
|
|
18
|
-
private readonly baseDir: string;
|
|
19
|
-
|
|
20
|
-
private rendererConfigCache!: Promise<UserConfig>[];
|
|
21
|
-
|
|
22
12
|
constructor(private readonly pluginConfig: VitePluginConfig, private readonly projectDir: string, private readonly isProd: boolean) {
|
|
23
|
-
this.baseDir = path.join(projectDir, '.vite');
|
|
24
13
|
d('Config mode:', this.mode);
|
|
25
14
|
}
|
|
26
15
|
|
|
27
|
-
resolveConfig(
|
|
28
|
-
// `command` is to be passed as an arguments when the user export a function in `vite.config.js`.
|
|
16
|
+
resolveConfig(buildConfig: VitePluginBuildConfig | VitePluginRendererConfig, configEnv: Partial<ConfigEnv> = {}) {
|
|
29
17
|
// @see - https://vitejs.dev/config/#conditional-config
|
|
30
18
|
configEnv.command ??= this.isProd ? 'build' : 'serve';
|
|
31
|
-
// `mode` affects `.env.[mode]` file
|
|
19
|
+
// `mode` affects `.env.[mode]` file load.
|
|
32
20
|
configEnv.mode ??= this.mode;
|
|
33
|
-
|
|
21
|
+
|
|
22
|
+
// Hack! Pass the forge runtime config to the vite config file in the template.
|
|
23
|
+
Object.assign(configEnv, {
|
|
24
|
+
root: this.projectDir,
|
|
25
|
+
forgeConfig: this.pluginConfig,
|
|
26
|
+
forgeConfigSelf: buildConfig,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// `configEnv` is to be passed as an arguments when the user export a function in `vite.config.js`.
|
|
30
|
+
return loadConfigFromFile(configEnv as ConfigEnv, buildConfig.config);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
33
|
get mode(): string {
|
|
@@ -40,60 +37,15 @@ export default class ViteConfigGenerator {
|
|
|
40
37
|
return this.isProd ? 'production' : 'development';
|
|
41
38
|
}
|
|
42
39
|
|
|
43
|
-
async
|
|
44
|
-
const defines: Record<string, any> = {};
|
|
45
|
-
const rendererConfigs = await this.getRendererConfig();
|
|
46
|
-
for (const [index, userConfig] of rendererConfigs.entries()) {
|
|
47
|
-
const name = this.pluginConfig.renderer[index].name;
|
|
48
|
-
if (!name) {
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
const NAME = name.toUpperCase().replace(/ /g, '_');
|
|
52
|
-
// `server.port` is set in `launchRendererDevServers` in `VitePlugin.ts`.
|
|
53
|
-
defines[`${NAME}_VITE_DEV_SERVER_URL`] = this.isProd ? undefined : JSON.stringify(`http://localhost:${userConfig?.server?.port}`);
|
|
54
|
-
defines[`${NAME}_VITE_NAME`] = JSON.stringify(name);
|
|
55
|
-
}
|
|
56
|
-
return defines;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async getBuildConfig(watch = false): Promise<UserConfig[]> {
|
|
40
|
+
async getBuildConfig(): Promise<UserConfig[]> {
|
|
60
41
|
if (!Array.isArray(this.pluginConfig.build)) {
|
|
61
42
|
throw new Error('"config.build" must be an Array');
|
|
62
43
|
}
|
|
63
44
|
|
|
64
|
-
const define = await this.getDefines();
|
|
65
|
-
const plugins = [externalBuiltins()];
|
|
66
45
|
const configs = this.pluginConfig.build
|
|
67
|
-
|
|
68
|
-
.
|
|
69
|
-
|
|
70
|
-
// Ensure that each build config loads the .env file correctly.
|
|
71
|
-
mode: this.mode,
|
|
72
|
-
build: {
|
|
73
|
-
lib: entry
|
|
74
|
-
? {
|
|
75
|
-
entry,
|
|
76
|
-
// Electron can only support cjs.
|
|
77
|
-
formats: ['cjs'],
|
|
78
|
-
fileName: () => '[name].js',
|
|
79
|
-
}
|
|
80
|
-
: undefined,
|
|
81
|
-
// Prevent multiple builds from interfering with each other.
|
|
82
|
-
emptyOutDir: false,
|
|
83
|
-
// 🚧 Multiple builds may conflict.
|
|
84
|
-
outDir: path.join(this.baseDir, 'build'),
|
|
85
|
-
watch: watch ? {} : undefined,
|
|
86
|
-
},
|
|
87
|
-
clearScreen: false,
|
|
88
|
-
define,
|
|
89
|
-
plugins,
|
|
90
|
-
};
|
|
91
|
-
if (config) {
|
|
92
|
-
const loadResult = await this.resolveConfig(config);
|
|
93
|
-
return mergeConfig(defaultConfig, loadResult?.config ?? {});
|
|
94
|
-
}
|
|
95
|
-
return defaultConfig;
|
|
96
|
-
});
|
|
46
|
+
// Prevent load the default `vite.config.js` file.
|
|
47
|
+
.filter(({ config }) => config)
|
|
48
|
+
.map<Promise<UserConfig>>(async (buildConfig) => (await this.resolveConfig(buildConfig))?.config ?? {});
|
|
97
49
|
|
|
98
50
|
return await Promise.all(configs);
|
|
99
51
|
}
|
|
@@ -103,20 +55,9 @@ export default class ViteConfigGenerator {
|
|
|
103
55
|
throw new Error('"config.renderer" must be an Array');
|
|
104
56
|
}
|
|
105
57
|
|
|
106
|
-
const configs =
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
mode: this.mode,
|
|
110
|
-
// Make sure that Electron can be loaded into the local file using `loadFile` after packaging.
|
|
111
|
-
base: './',
|
|
112
|
-
build: {
|
|
113
|
-
outDir: path.join(this.baseDir, 'renderer', name),
|
|
114
|
-
},
|
|
115
|
-
clearScreen: false,
|
|
116
|
-
};
|
|
117
|
-
const loadResult = (await this.resolveConfig(config)) ?? { path: '', config: {}, dependencies: [] };
|
|
118
|
-
return mergeConfig(defaultConfig, loadResult.config);
|
|
119
|
-
}));
|
|
58
|
+
const configs = this.pluginConfig.renderer
|
|
59
|
+
.filter(({ config }) => config)
|
|
60
|
+
.map<Promise<UserConfig>>(async (buildConfig) => (await this.resolveConfig(buildConfig))?.config ?? {});
|
|
120
61
|
|
|
121
62
|
return await Promise.all(configs);
|
|
122
63
|
}
|
package/src/VitePlugin.ts
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
|
-
import fs from 'node:fs/promises';
|
|
2
|
-
import { AddressInfo } from 'node:net';
|
|
3
1
|
import path from 'node:path';
|
|
4
2
|
|
|
5
3
|
import { namedHookWithTaskFn, PluginBase } from '@electron-forge/plugin-base';
|
|
6
|
-
import
|
|
4
|
+
import chalk from 'chalk';
|
|
7
5
|
import debug from 'debug';
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import fs from 'fs-extra';
|
|
7
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
10
8
|
import { default as vite } from 'vite';
|
|
11
9
|
|
|
12
|
-
import {
|
|
10
|
+
import { getFlatDependencies } from './util/package';
|
|
11
|
+
import { onBuildDone } from './util/plugins';
|
|
13
12
|
import ViteConfigGenerator from './ViteConfig';
|
|
14
13
|
|
|
14
|
+
import type { VitePluginConfig } from './Config';
|
|
15
|
+
import type { ForgeMultiHookMap, ResolvedForgeConfig, StartResult } from '@electron-forge/shared-types';
|
|
16
|
+
import type { AddressInfo } from 'node:net';
|
|
17
|
+
// eslint-disable-next-line node/no-extraneous-import
|
|
18
|
+
import type { RollupWatcher } from 'rollup';
|
|
19
|
+
|
|
15
20
|
const d = debug('electron-forge:plugin:vite');
|
|
16
21
|
|
|
17
22
|
export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
@@ -41,7 +46,7 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
41
46
|
process.on('SIGINT' as NodeJS.Signals, (_signal) => this.exitHandler({ exit: true }));
|
|
42
47
|
};
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
public setDirectories(dir: string): void {
|
|
45
50
|
this.projectDir = dir;
|
|
46
51
|
this.baseDir = path.join(dir, '.vite');
|
|
47
52
|
}
|
|
@@ -55,7 +60,7 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
55
60
|
prePackage: [
|
|
56
61
|
namedHookWithTaskFn<'prePackage'>(async () => {
|
|
57
62
|
this.isProd = true;
|
|
58
|
-
await fs.
|
|
63
|
+
await fs.remove(this.baseDir);
|
|
59
64
|
|
|
60
65
|
await Promise.all([this.build(), this.buildRenderer()]);
|
|
61
66
|
}, 'Building vite bundles'),
|
|
@@ -67,14 +72,64 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
67
72
|
this.exitHandler({ cleanup: true, exit: true });
|
|
68
73
|
});
|
|
69
74
|
},
|
|
75
|
+
resolveForgeConfig: this.resolveForgeConfig,
|
|
76
|
+
packageAfterCopy: this.packageAfterCopy,
|
|
70
77
|
};
|
|
71
78
|
};
|
|
72
79
|
|
|
80
|
+
resolveForgeConfig = async (forgeConfig: ResolvedForgeConfig): Promise<ResolvedForgeConfig> => {
|
|
81
|
+
forgeConfig.packagerConfig ??= {};
|
|
82
|
+
|
|
83
|
+
if (forgeConfig.packagerConfig.ignore) {
|
|
84
|
+
if (typeof forgeConfig.packagerConfig.ignore !== 'function') {
|
|
85
|
+
console.error(
|
|
86
|
+
chalk.yellow(`You have set packagerConfig.ignore, the Electron Forge Vite plugin normally sets this automatically.
|
|
87
|
+
|
|
88
|
+
Your packaged app may be larger than expected if you dont ignore everything other than the '.vite' folder`)
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
return forgeConfig;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
forgeConfig.packagerConfig.ignore = (file: string) => {
|
|
95
|
+
if (!file) return false;
|
|
96
|
+
|
|
97
|
+
// Always starts with `/`
|
|
98
|
+
// @see - https://github.com/electron/packager/blob/v18.1.3/src/copy-filter.ts#L89-L93
|
|
99
|
+
return !file.startsWith('/.vite');
|
|
100
|
+
};
|
|
101
|
+
return forgeConfig;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
packageAfterCopy = async (_forgeConfig: ResolvedForgeConfig, buildPath: string): Promise<void> => {
|
|
105
|
+
const pj = await fs.readJson(path.resolve(this.projectDir, 'package.json'));
|
|
106
|
+
const flatDependencies = await getFlatDependencies(this.projectDir);
|
|
107
|
+
|
|
108
|
+
if (!pj.main?.includes('.vite/')) {
|
|
109
|
+
throw new Error(`Electron Forge is configured to use the Vite plugin. The plugin expects the
|
|
110
|
+
"main" entry point in "package.json" to be ".vite/*" (where the plugin outputs
|
|
111
|
+
the generated files). Instead, it is ${JSON.stringify(pj.main)}`);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (pj.config) {
|
|
115
|
+
delete pj.config.forge;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
await fs.writeJson(path.resolve(buildPath, 'package.json'), pj, {
|
|
119
|
+
spaces: 2,
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Copy the dependencies in package.json
|
|
123
|
+
for (const dep of flatDependencies) {
|
|
124
|
+
await fs.copy(dep.src, path.resolve(buildPath, dep.dest));
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
73
128
|
startLogic = async (): Promise<StartResult> => {
|
|
74
129
|
if (VitePlugin.alreadyStarted) return false;
|
|
75
130
|
VitePlugin.alreadyStarted = true;
|
|
76
131
|
|
|
77
|
-
await fs.
|
|
132
|
+
await fs.remove(this.baseDir);
|
|
78
133
|
|
|
79
134
|
return {
|
|
80
135
|
tasks: [
|
|
@@ -92,7 +147,7 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
92
147
|
{
|
|
93
148
|
title: 'Compiling main process code',
|
|
94
149
|
task: async () => {
|
|
95
|
-
await this.build(
|
|
150
|
+
await this.build();
|
|
96
151
|
},
|
|
97
152
|
options: {
|
|
98
153
|
showTimer: true,
|
|
@@ -104,42 +159,34 @@ export default class VitePlugin extends PluginBase<VitePluginConfig> {
|
|
|
104
159
|
};
|
|
105
160
|
|
|
106
161
|
// Main process, Preload scripts and Worker process, etc.
|
|
107
|
-
build = async (
|
|
108
|
-
await
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return result;
|
|
138
|
-
})
|
|
139
|
-
.catch(reject);
|
|
140
|
-
});
|
|
141
|
-
})
|
|
142
|
-
);
|
|
162
|
+
build = async (): Promise<void> => {
|
|
163
|
+
const configs = await this.configGenerator.getBuildConfig();
|
|
164
|
+
const buildTasks: Promise<void>[] = [];
|
|
165
|
+
const isWatcher = (x: any): x is RollupWatcher => typeof x?.close === 'function';
|
|
166
|
+
|
|
167
|
+
for (const userConfig of configs) {
|
|
168
|
+
const buildTask = new Promise<void>((resolve, reject) => {
|
|
169
|
+
vite
|
|
170
|
+
.build({
|
|
171
|
+
// Avoid recursive builds caused by users configuring @electron-forge/plugin-vite in Vite config file.
|
|
172
|
+
configFile: false,
|
|
173
|
+
...userConfig,
|
|
174
|
+
plugins: [onBuildDone(resolve), ...(userConfig.plugins ?? [])],
|
|
175
|
+
})
|
|
176
|
+
.then((result) => {
|
|
177
|
+
if (isWatcher(result)) {
|
|
178
|
+
this.watchers.push(result);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return result;
|
|
182
|
+
})
|
|
183
|
+
.catch(reject);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
buildTasks.push(buildTask);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
await Promise.all(buildTasks);
|
|
143
190
|
};
|
|
144
191
|
|
|
145
192
|
// Renderer process
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
|
|
5
|
+
export interface Dependency {
|
|
6
|
+
name: string;
|
|
7
|
+
path: SourceAndDestination;
|
|
8
|
+
dependencies: Dependency[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface SourceAndDestination {
|
|
12
|
+
src: string;
|
|
13
|
+
dest: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function isRootPath(dir: string) {
|
|
17
|
+
// *unix or Windows root path
|
|
18
|
+
return dir === '/' || /^[a-zA-Z]:\\$/i.test(dir);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function isDirectory(p: string): Promise<boolean> {
|
|
22
|
+
try {
|
|
23
|
+
const stat = await fs.promises.stat(p);
|
|
24
|
+
return stat.isDirectory();
|
|
25
|
+
} catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function lookupNodeModulesPaths(root: string, paths: string[] = []): Promise<string[]> {
|
|
31
|
+
if (!root) return paths;
|
|
32
|
+
if (!path.isAbsolute(root)) return paths;
|
|
33
|
+
|
|
34
|
+
const p = path.join(root, 'node_modules');
|
|
35
|
+
|
|
36
|
+
if (await isDirectory(p)) {
|
|
37
|
+
paths = paths.concat(p);
|
|
38
|
+
}
|
|
39
|
+
root = path.join(root, '..');
|
|
40
|
+
|
|
41
|
+
return isRootPath(root) ? paths : await lookupNodeModulesPaths(root, paths);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function resolveDependencies(root: string) {
|
|
45
|
+
const rootDependencies = Object.keys((await fs.readJson(path.join(root, 'package.json'))).dependencies || {});
|
|
46
|
+
const resolve = async (prePath: string, dependencies: string[], collected: Map<string, Dependency> = new Map()) =>
|
|
47
|
+
await Promise.all(
|
|
48
|
+
dependencies.map(async (name) => {
|
|
49
|
+
let curPath = prePath,
|
|
50
|
+
depPath = null,
|
|
51
|
+
packageJson = null;
|
|
52
|
+
while (!packageJson && !isRootPath(curPath)) {
|
|
53
|
+
const allNodeModules = await lookupNodeModulesPaths(curPath);
|
|
54
|
+
|
|
55
|
+
for (const nodeModules of allNodeModules) {
|
|
56
|
+
depPath = path.join(nodeModules, name);
|
|
57
|
+
if (await fs.pathExists(depPath)) break;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (depPath) {
|
|
61
|
+
try {
|
|
62
|
+
packageJson = await fs.readJson(path.join(depPath, 'package.json'));
|
|
63
|
+
} catch (err) {
|
|
64
|
+
// lookup node_modules
|
|
65
|
+
curPath = path.join(curPath, '..');
|
|
66
|
+
if (curPath.length < root.length) {
|
|
67
|
+
console.error(`not found 'node_modules' in root path: ${root}`);
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (!depPath || !packageJson) {
|
|
75
|
+
throw new Error(`find dependencies error in: ${curPath}`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const result: Dependency = {
|
|
79
|
+
name,
|
|
80
|
+
path: {
|
|
81
|
+
src: depPath,
|
|
82
|
+
dest: path.relative(root, depPath),
|
|
83
|
+
},
|
|
84
|
+
dependencies: [],
|
|
85
|
+
};
|
|
86
|
+
const shouldResolveDeps = !collected.has(depPath);
|
|
87
|
+
collected.set(depPath, result);
|
|
88
|
+
if (shouldResolveDeps) {
|
|
89
|
+
result.dependencies = await resolve(depPath, Object.keys(packageJson.dependencies || {}), collected);
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
})
|
|
93
|
+
);
|
|
94
|
+
return resolve(root, rootDependencies);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export async function getFlatDependencies(root = process.cwd()) {
|
|
98
|
+
const depsTree = await resolveDependencies(root);
|
|
99
|
+
const depsFlat = new Map<string, SourceAndDestination>();
|
|
100
|
+
|
|
101
|
+
const flatten = (dep: Dependency) => {
|
|
102
|
+
depsFlat.set(dep.path.src, dep.path); // dedup
|
|
103
|
+
dep.dependencies.forEach(flatten);
|
|
104
|
+
};
|
|
105
|
+
depsTree.forEach(flatten);
|
|
106
|
+
|
|
107
|
+
return [...depsFlat.values()];
|
|
108
|
+
}
|
package/src/util/plugins.ts
CHANGED
|
@@ -1,35 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
// eslint-disable-next-line node/no-unpublished-import
|
|
3
2
|
import type { Plugin } from 'vite';
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
name: '@electron-forge/plugin-vite:external-builtins',
|
|
11
|
-
config(config) {
|
|
12
|
-
const nativeModules = builtinModules.filter((e) => !e.startsWith('_'));
|
|
13
|
-
const builtins = ['electron', ...nativeModules, ...nativeModules.map((m) => `node:${m}`)];
|
|
14
|
-
|
|
15
|
-
config.build ??= {};
|
|
16
|
-
config.build.rollupOptions ??= {};
|
|
17
|
-
|
|
18
|
-
let external = config.build.rollupOptions.external;
|
|
19
|
-
if (Array.isArray(external) || typeof external === 'string' || external instanceof RegExp) {
|
|
20
|
-
external = builtins.concat(external as string[]);
|
|
21
|
-
} else if (typeof external === 'function') {
|
|
22
|
-
const original = external;
|
|
23
|
-
external = function (source, importer, isResolved) {
|
|
24
|
-
if (builtins.includes(source)) {
|
|
25
|
-
return true;
|
|
26
|
-
}
|
|
27
|
-
return original(source, importer, isResolved);
|
|
28
|
-
};
|
|
29
|
-
} else {
|
|
30
|
-
external = builtins;
|
|
31
|
-
}
|
|
32
|
-
config.build.rollupOptions.external = external;
|
|
4
|
+
export function onBuildDone(callback: () => void) {
|
|
5
|
+
return {
|
|
6
|
+
name: '@electron-forge/plugin-vite:build-done',
|
|
7
|
+
closeBundle() {
|
|
8
|
+
callback();
|
|
33
9
|
},
|
|
34
|
-
};
|
|
10
|
+
} as Plugin;
|
|
35
11
|
}
|