node · JavaScript
The message
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/src/util' imported from /app/src/index.js
What it means
When Node runs ESM it treats import paths as literal file names the way a browser does, so './util' is not './util.js' — it is a file that does not exist. CommonJS used to try extensions for you, and TypeScript leaves extensionless imports untouched through compilation, which is why a tsc-built project throws a pile of these the first time you run it with node. Add the .js extension to relative imports; inside a TypeScript file you still write './util.js', because the compiled output is what Node will read. Package names from node_modules take no extension.
The fix
There is no one-line command for this. The explanation says what to look at instead.
- Printed by
- node
- JavaScript
- 15
Browser and Node errors usually tell you what broke and not why the value became what it was — you read undefined, it was not a function, it was not JSON — so the place to fix is upstream of the line that threw, and silencing just that line with ?. and default values makes the same problem reappear further away in a form that is harder to recognise.
Reading an error message
- Read from the first line down. The lower you go the more it is about the tool’s internals; the cause is usually at the top.
- If there is a file and a line number, start there — not the top stack frame, but the topmost line that names a file you wrote.
- Search the message verbatim, but strip your own paths and variable names first; those are what stop the search from matching.
- The same condition is worded differently across tool versions. If results look wrong, add the version number to the query.
- Before pasting a fix, check what it throws away. Some of these cannot be undone.
Common questions
Q. What does “Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/app/src/util' imported from /app/src/index.js” mean?
When Node runs ESM it treats import paths as literal file names the way a browser does, so './util' is not './util.js' — it is a file that does not exist. CommonJS used to try extensions for you, and TypeScript leaves extensionless imports untouched through compilation, which is why a tsc-built project throws a pile of these the first time you run it with node. Add the .js extension to relative imports; inside a TypeScript file you still write './util.js', because the compiled output is what Node will read. Package names from node_modules take no extension.
Q. How do I fix it?
There is no one-line command. The explanation above says what to look at instead.
Q. Which tool prints this?
node. It sits under JavaScript, and the message runs to 9 words.