In an electron application im using the @electron-forge/plugin-webpack plugin. Here is my forge.config.js file.
module.exports = {
rebuildConfig: {},
publishers: [
{
name: '@electron-forge/publisher-github',
config: {
repository: {
owner: '...',
name: '...'
},
}
}
],
makers: [
{
name: '@electron-forge/maker-squirrel',
config: {},
},
{
name: '@electron-forge/maker-zip',
platforms: ['darwin'],
},
{
name: '@electron-forge/maker-deb'
config: {},
},
{
name: '@electron-forge/maker-rpm',
config: {},
},
],
// comment the block below inorder to copy the node_modules to the output when packaging
plugins: [
{
name: '@electron-forge/plugin-webpack',
config: {
mainConfig: './webpack.main.config.js',
devContentSecurityPolicy: "connect-src 'self' * 'unsafe-eval'",
renderer: {
config: './webpack.renderer.config.js',
entryPoints: [
{
html: './src/public/home.html',
js: './src/renderer.js',
name: 'main_window',
preload: {
js: './src/preload.js'
},
},
],
},
},
},
],
};
when i run npm run package the out/<app>/resources/app/node_modules directory is empty. However if I remove the plugin section, then node_modules are copied correctly. But i cant comment the plugin section as webpack is needed.
Am I configuring anything wrong or missing something?
I could't find what is the issue (or it is the expected behaviour) with the configuration. But as a workaround i used forge hooks.
forge.config.js
const fs = require('fs');
const path = require('path');
const {exec} = require('child_process');
module.exports = {
...
hooks: {
postPackage: async (forgeConfig, options) => {
const srcNodeModules = path.join(__dirname, 'node_modules')
const output = path.join(__dirname, `out/myapp-${process.platform}-${process.arch}/resources/app`)
const destNodeModules = path.join(output, 'node_modules')
fs.cpSync( srcNodeModules, destNodeModules, {recursive: true});
exec(`npm --prefix ${output} prune --production`)
}
}
}
In my case I was able to solve this problem by defining a custom ignore list in my forge config file.
module.exports = {
...
packagerConfig: {
ignore: [
/^\/(src|test|out)/,
/^\/node_modules\/electron($|\/)/,
/^\/node_modules\/\.bin($|\/)/,
/^\/node_modules\/\.cache($|\/)/,
/^\/node_modules\/debug($|\/)/,
/^\/node_modules\/electron-debug($|\/)/,
/^\/node_modules\/electron-devtools-installer($|\/)/,
/^\/node_modules\/electron-edge-js($|\/)/,
/^\/node_modules\/electron-packager($|\/)/,
/^\/node_modules\/electron-winstaller($|\/)/,
/^\/node_modules\/\.pnp($|\/)/,
/^\/node_modules\/\.s?css-cache($|\/)/,
/^\/node_modules\/\.shrinkwrap.yaml$/,
],
},
...
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With