-
-
Notifications
You must be signed in to change notification settings - Fork 32.7k
Closed
Labels
confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.replIssues and PRs related to the REPL subsystem.Issues and PRs related to the REPL subsystem.
Description
Where?
- Version: v10.15.3, v12.13.1, v13.3.0
- Platform: x86_64 GNU/Linux
- Subsystem: require
Repo Steps
Given the following tree:
mkdir testrequire
cd testrequire
mkdir node_modules
echo 'module.exports = `yes`' > node_modules/foo.js
The following code will produce different behavior when executed as a main module, required module, or from the REPL
require('./foo') // this should always throw an error, but works on the REPL
Tests
1. As main module:
↪ echo 'require(`./foo`)' > main.js; node main.js
internal/modules/cjs/loader.js:800
throw err;
^
Error: Cannot find module './foo'
2. As stdin input:
↪ echo 'require(`./foo`)' | node
internal/modules/cjs/loader.js:800
throw err;
^
Error: Cannot find module './foo'
3. As REPL commands:
This is the surprising behavior
↪ node
Welcome to Node.js v12.13.1.
Type ".help" for more information.
> require('./foo')
'yes'
4. As REPL but indirectly loaded
↪ echo 'require(`./foo`)' > main.js
↪ node
Welcome to Node.js v12.13.1.
Type ".help" for more information.
> require('./main')
Thrown:
Error: Cannot find module './foo'
Is this a bug?
I'm not sure if this is a bug or not, but it is quite surprising to me.
I'd expect require
to behave the same no matter from where it is being executed. Why is that the REPL behaves differently?
Metadata
Metadata
Assignees
Labels
confirmed-bugIssues with confirmed bugs.Issues with confirmed bugs.replIssues and PRs related to the REPL subsystem.Issues and PRs related to the REPL subsystem.