Skip to content

Commit 798ee40

Browse files
addaleaxtargos
authored andcommitted
module: do not use process.exit()
Inside workers, using stdio is always asynchronous, so using `process.exit()` always interrupts sending of messages to the parent thread, including error messages presented over stdio. Do not use `process.exit()` and instead trigger a “real” uncaught exception. PR-URL: #25769 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com>
1 parent 0878252 commit 798ee40

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

lib/internal/modules/cjs/loader.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,12 @@ module.exports = Module;
6060
let asyncESM;
6161
let ModuleJob;
6262
let createDynamicModule;
63-
let decorateErrorStack;
6463

6564
function lazyLoadESM() {
6665
asyncESM = require('internal/process/esm_loader');
6766
ModuleJob = require('internal/modules/esm/module_job');
6867
createDynamicModule = require(
6968
'internal/modules/esm/create_dynamic_module');
70-
decorateErrorStack = require('internal/util').decorateErrorStack;
7169
}
7270

7371
const {
@@ -793,9 +791,7 @@ Module.runMain = function() {
793791
return loader.import(pathToFileURL(process.argv[1]).pathname);
794792
})
795793
.catch((e) => {
796-
decorateErrorStack(e);
797-
console.error(e);
798-
process.exit(1);
794+
internalBinding('util').triggerFatalException(e);
799795
});
800796
} else {
801797
Module._load(process.argv[1], null, true);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
'use strict';
2+
const common = require('../common');
3+
const assert = require('assert');
4+
const { Worker } = require('worker_threads');
5+
6+
const worker = new Worker('./does-not-exist.js', {
7+
execArgv: ['--experimental-modules'],
8+
});
9+
10+
worker.on('error', common.mustCall((err) => {
11+
// eslint-disable-next-line node-core/no-unescaped-regexp-dot
12+
assert(/Cannot find module .+does-not-exist.js/.test(err.message), err);
13+
}));

0 commit comments

Comments
 (0)