Nearsighted Paramecium Multiverse

    TypeScript icon, indicating that this package has built-in type declarations

    2.0.5 • Public • Published


    Build Status npm version

    Transform the differences between CommonJS code (.js, .cjs) and ECMAScript module code (.mjs), based on the official Node.js documentation.

    We suggest writing your code as ESM (.mjs, .ts, .tsx, .js with module type) and compiling down to CJS instead of the reverse. This means using new syntax like import.meta, import(), etc!

    // Input: mjs
    const self = import.meta.url;
    // Output: cjs
    const self = __filename;


    yarn add --dev babel-plugin-cjs-esm-interop

    Add the plugin to your root babel.config.* file and configure the output format option with either mjs (default) or cjs.

    module.exports = {
      plugins: [['babel-plugin-cjs-esm-interop', { format: 'mjs' }]],


    • Linux, OSX, Windows
    • Node 14.15+


    The following transforms and error handling are applied.

    CJS output

    • export, export default
      • Will throw an error if used.
    • import.meta.url -> __filename (with file:// contextually)
    • path.dirname(import.meta.url) -> __dirname (with file:// contextually)

    MJS output

    • require(), require.resolve(), require.extensions, require.cache, exports.<name>, module.exports, process.env.NODE_PATH
      • Will throw an error if used.
    • __filename -> import.meta.url
    • __dirname -> path.dirname(import.meta.url)

    How to's

    If you want to support ESM code, you'll need to move away from certain features, in which you have a few options.

    What to replace require() with?

    • Use import() for JS files. Be aware that this is async and cannot be used in the module scope unless top-level await is supported.
    • Use the fs module for JSON files: JSON.parse(fs.readFileSync(path))
    • Use module.createRequire(), which returns a require-like function you may use. More info.

    What to replace require.resolve() with?

    • Use the resolve npm package.
    • Use module.createRequire(), which returns a require-like function with a resolver you may use. More info.


    npm i babel-plugin-cjs-esm-interop

    DownloadsWeekly Downloads






    Unpacked Size

    28.3 kB

    Total Files


    Last publish


    • milesj