diff --git a/lib/internal/main/repl.js b/lib/internal/main/repl.js index 58afb2be9879fa..b38102a15482fd 100644 --- a/lib/internal/main/repl.js +++ b/lib/internal/main/repl.js @@ -46,10 +46,9 @@ cliRepl.createInternalRepl(process.env, (err, repl) => { // If user passed '-e' or '--eval' along with `-i` or `--interactive`, // evaluate the code in the current context. -const source = getOptionValue('--eval'); -if (source != null) { +if (getOptionValue('[has_eval_string]')) { evalScript('[eval]', - source, + getOptionValue('--eval'), getOptionValue('--inspect-brk'), getOptionValue('--print')); } diff --git a/test/parallel/test-repl-cli-eval.js b/test/parallel/test-repl-cli-eval.js new file mode 100644 index 00000000000000..6069a20957bd25 --- /dev/null +++ b/test/parallel/test-repl-cli-eval.js @@ -0,0 +1,22 @@ +'use strict'; +const common = require('../common'); +const child_process = require('child_process'); +const assert = require('assert'); + +// Regression test for https://github.com/nodejs/node/issues/27575: +// module.id === '' in the REPL. + +for (const extraFlags of [[], ['-e', '42']]) { + const flags = ['--interactive', ...extraFlags]; + const proc = child_process.spawn(process.execPath, flags, { + stdio: ['pipe', 'pipe', 'inherit'] + }); + proc.stdin.write('module.id\n.exit\n'); + + let stdout = ''; + proc.stdout.setEncoding('utf8'); + proc.stdout.on('data', (chunk) => stdout += chunk); + proc.stdout.on('end', common.mustCall(() => { + assert(stdout.includes(''), `stdout: ${stdout}`); + })); +}