'Directory import is not supported resolving ES modules' with Node.js

25,198

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.

Share:
25,198
Ayoub k
Author by

Ayoub k

Updated on July 09, 2022

Comments

  • Ayoub k
    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