-
-
Notifications
You must be signed in to change notification settings - Fork 506
/
WebpackTemplate.ts
60 lines (55 loc) · 2.59 KB
/
WebpackTemplate.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
import { ForgeTemplate } from '@electron-forge/shared-types';
import { asyncOra } from '@electron-forge/async-ora';
import fs from 'fs-extra';
import path from 'path';
const currentVersion = require('../package').version;
class WebpackTemplate implements ForgeTemplate {
public devDependencies = [
`@electron-forge/plugin-webpack@${currentVersion}`,
// TODO: Use the @zeit publish once https://github.com/zeit/webpack-asset-relocator-loader/pull/41 has been merged
'@marshallofsound/webpack-asset-relocator-loader@^0.5.0',
'file-loader@^4.0.0',
'node-loader@^0.6.0',
'style-loader@^0.23.1',
];
public initializeTemplate = async (directory: string) => {
await asyncOra('Setting up forge configuration', async () => {
const pjPath = path.resolve(directory, 'package.json');
const currentPJ = await fs.readJson(pjPath);
currentPJ.main = '.webpack/main';
currentPJ.config.forge.plugins = currentPJ.config.forge.plugins || [];
currentPJ.config.forge.plugins.push([
'@electron-forge/plugin-webpack',
{
mainConfig: './webpack.main.config.js',
renderer: {
config: './webpack.renderer.config.js',
entryPoints: [{
html: './src/index.html',
js: './src/renderer.js',
name: 'main_window',
}],
},
},
]);
await fs.writeJson(pjPath, currentPJ, {
spaces: 2,
});
});
await asyncOra('Setting up webpack configuration', async () => {
await fs.copy(path.resolve(__dirname, '..', 'tmpl', 'webpack.main.config.js'), path.resolve(directory, 'webpack.main.config.js'));
await fs.copy(path.resolve(__dirname, '..', 'tmpl', 'webpack.renderer.config.js'), path.resolve(directory, 'webpack.renderer.config.js'));
await fs.copy(path.resolve(__dirname, '..', 'tmpl', 'webpack.rules.js'), path.resolve(directory, 'webpack.rules.js'));
await fs.copy(path.resolve(__dirname, '..', 'tmpl', 'renderer.js'), path.resolve(directory, 'src', 'renderer.js'));
let indexContents = await fs.readFile(path.resolve(directory, 'src', 'index.js'), 'utf8');
indexContents = indexContents.split('\n').map((line) => {
if (line.includes('mainWindow.loadURL')) return ' mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);';
if (line.includes('link rel="stylesheet"')) return '';
return line;
}).join('\n');
await fs.writeFile(path.resolve(directory, 'src', 'main.js'), indexContents);
await fs.remove(path.resolve(directory, 'src', 'index.js'));
});
}
}
export default new WebpackTemplate();