forge icon indicating copy to clipboard operation
forge copied to clipboard

Electron Forge's Webpack plugin errantly depends on node require

Open MynockSpit opened this issue 4 years ago • 1 comments

Pre-flight checklist

  • [X] I have read the contribution documentation for this project.
  • [X] I agree to follow the code of conduct that this project uses.
  • [X] I have searched the issue tracker for a bug that matches the one I want to file, without success.

Electron Forge version

6.0.0-beta.61

Electron version

v16.0.0

Operating system

macOS 12.0.1

Last known working Electron Forge version

N/A

Expected behavior

Electron Forge should not depend on node's require unless both nodeIntegration: true and contextIsolation: false.

Actual behavior

Electron Forge throws an error in the dev-server when you attempt to use nodeIntegration as described here: https://www.electronforge.io/config/plugins/webpack#node-integration

You can work around this for the dev-server by adding target: ['web', 'electron-renderer'] to your renderer webpack config, but it doesn't fix It for production builds:

Screen Shot 2021-11-19 at 11 50 22 AM Screen Shot 2021-11-19 at 11 50 36 AM

Steps to reproduce

  1. Create a new electron app using the typescript-webpack plugin. npx create-electron-app my-new-app --template=typescript-webpack
  2. Add webPreferences: { nodeIntegration: true } to the new BrowserWindow call in index.ts
  3. Add nodeIntegration: true to the forge config in the package.json.
  4. Start the new app, observe the error.

As mentioned above, you can work around this for the dev-server by adding target: ['web', 'electron-renderer'] to your renderer webpack config, but it doesn't fix It for production builds.

To fully fix this, you need to set contextIsolation: false in the new BrowserWindow call in index.ts which is not ideal.

Additional information

This may be a bug in vercel/webpack-asset-relocator-loader and not Electron Forge, but it should at least be documented.

MynockSpit avatar Nov 19 '21 18:11 MynockSpit

Found this bug also. If someone does not want to open { nodeIntegration: true }, another workaround is to get the page url from ipcMain side by adding an ipcMain handle method to return the page urls.

but I think it is still a bug that needs to be fixed.

RoyYangS avatar Mar 02 '22 03:03 RoyYangS

I also encountered this problem, is there any latest solution? Thanks.

iCyris avatar Dec 16 '22 07:12 iCyris