electron-builder: Building NSIS installers broken after switching from 22.10.5 to 22.11.1
- Version: 22.11.1
- Electron Version: 12.0.6
- Electron Type (current, beta, nightly): current
- Target: Windows, NSIS, x64
After updating electron-builder from 22.10.5 to 22.11.1, this error started happening for all of our Windows builds:
• packager.vm is used: Cannot read property 'readFileSync' of undefined
(node:90934) UnhandledPromiseRejectionWarning: Error: Exit code: ENOENT. spawn prlctl ENOENT
at /path/to/project/node_modules/builder-util/src/util.ts:132:18
at exithandler (child_process.js:315:5)
at ChildProcess.errorhandler (child_process.js:327:5)
at ChildProcess.emit (events.js:315:20)
at Process.ChildProcess._handle.onexit (internal/child_process.js:275:12)
at onErrorNT (internal/child_process.js:465:16)
at processTicksAndRejections (internal/process/task_queues.js:80:21)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:90934) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:90934) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
After some digging, this seems to be an issue with how app-builder-lib’s TypeScript source is being compiled for distribution. The original source looks like this:
// ...
import fs from "fs"
// ...
export class UninstallerReader {
// noinspection SpellCheckingInspection
static exec(installerPath: string, uninstallerPath: string) {
const buffer = fs.readFileSync(installerPath)
// ...
}
}
But in 22.11.1 this is being compiled to JavaScript that looks like this, where it expects the fs module to have a .default property, which it doesn’t (basically assuming it’s an ES module):
// ...
const fs_2 = require("fs");
// ...
class UninstallerReader {
// noinspection SpellCheckingInspection
static exec(installerPath, uninstallerPath) {
const buffer = fs_2.default.readFileSync(installerPath); // <-- fs_2.default is undefined here
// ...
}
}
Looking at the distributed Javascript for the previous version (22.10.5), it seems like this case is handled by the compiled output:
// ...
var _fs2 = _interopRequireDefault(require("fs"));
// ...
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// ...
class UninstallerReader {
// noinspection SpellCheckingInspection
static exec(installerPath, uninstallerPath) {
const buffer = _fs2.default.readFileSync(installerPath);
// ...
}
}
The _interopRequireDefault function seems to be something that used to be added by @babel/plugin-transform-modules-commonjs. My current theory is that something broke the Babel integration between these two versions.
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 8
- Comments: 15 (3 by maintainers)
Commits related to this issue
- Roll back electron-builder to 22.10.5 per https://github.com/electron-userland/electron-builder/issues/5863 — committed to Lovinity/wwsu-dj-controls by Lovinity 3 years ago
- fix(nsis): Building NSIS installers broken after switching from 22.10.5 to 22.11.1 Close #5863 — committed to electron-userland/electron-builder by develar 3 years ago
- fix(nsis): Building NSIS installers broken after switching from 22.10.5 to 22.11.1 (#5873) Close #5863 — committed to electron-userland/electron-builder by develar 3 years ago
- fix: import of update-notifier Close #5863 — committed to electron-userland/electron-builder by develar 3 years ago
@mmaietta ah, okay. Yeah it works great on 22.10.4.
https://github.com/electron-userland/electron-builder/issues/5668#issuecomment-826941928
Forgot about that because I’m on a M1 Mac, though it looks like @develar made some other changes there that might help.
Can confirm that the original issue is now fixed for me. Thanks for the hard work 👍
Thank you! It`s help me to make build for win. 22.10.5 work fine