'Directory import is not supported resolving ES modules' with Node.js
Solution 1
With ES6 modules you can not (yet?) import directories. Your import should look like this:
import database from "./database/index.js"
Solution 2
What happens here is that Node mandates using an extension in import
statements and also states,
Directory indexes (e.g.
'./startup/index.js'
) must also be fully specified.
Your import database from './database';
statement doesn't specify the index.js
. You can add index.js
as suggested in another answer, but that approach doesn't look elegant in TypeScript projects, when you'd end up importing a .js
file from a .ts
one.
You can change this Node extension resolution behavior by passing the --experimental-specifier-resolution=node
flag. This will work and will keep your code unchanged:
app.js
import database from './database';
database();
Run as: node --experimental-specifier-resolution=node app.js
.
A Node developer admitted that the documentation wasn't that clear.

Ayoub k
Updated on July 09, 2022Comments
-
Ayoub k 11 months
I'm using Node.js v14.13.0.
app.js file:
import database from './database'; database();
database/index.js file:
import mongoose from 'mongoose'; export default connect = async () => { try { await mongoose.connect('...', { }); } catch (error) {} };
In package.json I added
"type": "module"
.After running the app I get the following error:
Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/Users/xx/Desktop/Projects/node-starter/src/database' is not supported resolving ES modules imported from /Users/xx/Desktop/Projects/node-starter/src/app.js