electron-userland / electron-userland/electron-webpack
"Uncaught Error: module not found" inside preload script
- Dominant language
- TypeScript
- Stars
- 902
- Forks
- 168
- PR merge metrics
- No merged PRs in 30d
Description
Here's my preload.js:
```javascript
const { ipcRenderer, remote } = require('electron');
window.electron = {
ipcRenderer,
remote
};
```
And I load it like this:
```javascript
const window = new BrowserWindow({
webPreferences: {
nodeIntegration: false,
preload: path.resolve(__dirname, 'preload.js')
}
});
```
with the following electron-webpack config:
```
{
"main": {
"extraEntries": ["@/preload.js"]
}
}
```
### With `electron-webpack dev`
Everything works.
### With `electron-webpack build && electron dist/main.js`
The error I get in the BrowserWindow console is:
```
Uncaught Error: module not found
at preloadRequire (:3059:9)
at :2:3
at Object. (:3112:3)
at Object.require.32../../common/atom-binding-setup (:3120:4)
at o (:2:273)
at r (:2:439)
at :2:468
```
If interested, here's the compiled `dist/preload.js`:
```javascript
require("source-map-support/source-map-support.js").install(),module.exports=function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="",t(t.s=28)}({0:function(e,r){e.exports=require("electron")},28:function(e,r,t){const{ipcRenderer:n,remote:o}=t(0);window.electron={ipcRenderer:n,remote:o}}});
//# sourceMappingURL=preload.js.map
```
Also, if I copy my original preload.js, and paste it into `dist/preload.js`, and just run `electron dist/main`, everything works again.
My guess (not 100% sure): the webpack target for everything inside `extraEntries` is `electron`, so `preload.js` is bundled with that target (hence the module.exports stuff), but it should be bundled with target `web` or `electron-renderer`.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.