'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 monthsI'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