Search code examples
node.jsecmascript-6es6-modulesecmascript-5

Node Require and Import


import path from 'path';
import fs from 'fs';

fs.mkdirSync(path.join(__dirname, 'folderName'));

I want to create directories in node, when I require the modules (commonjs) everything works but when I change the type in my package.json to module and use imports the folder doesn't get created, what could I be doing wrong?


Solution

  • There is no __dirname in an ESM module. If it's something you need, you can manufacture it with this:

    import path from 'path';
    import { fileURLToPath } from 'url';
    
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);
    

    But, many of the functions in the fs module can take import.meta.url more directly. See this other answer for details on that.