Was this helpful?
{
// ...
"config": {
"forge": {
"plugins": [
{
"name": "@electron-forge/plugin-webpack",
"config": {
"mainConfig": "./webpack.main.config.js",
"renderer": {
"config": "./webpack.renderer.config.js",
"entryPoints": [{
"name": "main_window",
"html": "./src/renderer/index.html",
"js": "./src/renderer/index.js",
"preload": {
"js": "./src/preload.js"
}
}]
}
}
}
]
}
}
// ...
}{
"name": "my-app",
"main": "./.webpack/main",
// ...
}const mainWindow = new BrowserWindow({
webPreferences: {
preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY
}
});
mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY);// make sure this listener is set before your renderer.js code is called
ipcMain.on('get-preload-path', (e) => {
e.returnValue = WINDOW_PRELOAD_WEBPACK_ENTRY;
});const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('electron', {
getPreloadPath: () => ipcRenderer.sendSync('get-preload-path')
});const preloadPath = window.electron.getPreloadPath();declare const MAIN_WINDOW_WEBPACK_ENTRY: string;
declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string;{
name: '@electron-forge/plugin-webpack',
config: {
// other Webpack plugin config...
devServer: {
stats: 'verbose'
}
// ...
}
}{
name: '@electron-forge/plugin-webpack',
config: {
// other Webpack plugin config...
devContentSecurityPolicy: 'default-src \'self\' \'unsafe-inline\' data:; script-src \'self\' \'unsafe-eval\' \'unsafe-inline\' data:',
// other Webpack plugin config...
mainConfig: './webpack.main.config.js',
renderer: {
/* renderer config here, see above section */
}
}
}npm install --save-dev node-loader @vercel/webpack-asset-relocator-loader@1.7.3module.exports = {
module: {
rules: [
{
// We're specifying native_modules in the test because the asset
// relocator loader generates a "fake" .node file which is really
// a cjs file.
test: /native_modules\/.+\.node$/,
use: 'node-loader'
},
{
test: /\.(m?js|node)$/,
parser: { amd: false },
use: {
loader: '@vercel/webpack-asset-relocator-loader',
options: {
outputAssetBase: 'native_modules'
}
}
}
]
}
};const win = new BrowserWindow({
webPreferences: {
contextIsolation: false,
nodeIntegration: true
}
});{
name: '@electron-forge/plugin-webpack',
config: {
mainConfig: './webpack.main.config.js',
renderer: {
config: './webpack.renderer.config.js',
nodeIntegration: true, // Implies `target: 'electron-renderer'` for all entry points
entryPoints: [
{
html: './src/app/app.html',
js: './src/app/app.tsx',
name: 'app'
},
{
html: './src/mediaPlayer/index.html',
js: './src/mediaPlayer/index.tsx',
name: 'media_player',
nodeIntegration: false // Overrides the default nodeIntegration set above
}
]
}
}
}const relocateLoader = require('@vercel/webpack-asset-relocator-loader');
webpack({
// ...
plugins: [
{
apply (compiler) {
compiler.hooks.compilation.tap('webpack-asset-relocator-loader', compilation => {
relocateLoader.initAssetCache(compilation, outputAssetBase);
});
}
}
]
});import { hot } from "react-hot-loader";
const App: FunctionComponent = () => (
<div>
...
</div>
);
export default hot(module)(App)