Description
- Version: 8.11.4 and 10.9.0
- Platform: Mac OS X
- Subsystem:
require
The Folders as Modules docs say the following, for both 8.x and 10.x:
If the file specified by the 'main' entry of package.json is missing and can not be resolved, Node.js will report the entire module as missing with the default error:
Error: Cannot find module 'some-library'
However, in practice this doesn't seem to be the whole story. It seems that it will gracefully fall back to index.js
anyway if it exists.
Given the following index.js
and package.json
:
console.log('This is index');
{
"name": "test",
"main": "doesnotexist.js"
}
If you run node .
, you don't get an error - you get This is index
.
There is another sentence later in the docs:
If there is no package.json file present in the directory, then Node.js will attempt to load an index.js or index.node file out of that directory.
This would seem to also be applying in the case where there is a package.json
, but main
points to a file that doesn't exist.
Am I missing something, or do these docs need to be clarified?
PS: If you remove index.js
from the above example, an error occurs but still doesn't seem to match what's in the docs - it doesn't say it can't find what's referenced by main
; it simply says it cannot find the path you referenced (e.g. .
rather than doesnotexist
above).