CLI to convert CommonJS to ES6 modules (UNMAINTAINED)
CLI to convert JavaScript files from CommonJS to ES6 modules (aka ES2015 modules, aka JavaScript modules, aka hipster
require()).
This tool uses 5to6-codemod under the hood. It's basically just a thin convenience wrapper, which can process multiple files and convert both
imports and
exports.
Note that the process isn't foolproof, so you may have to manually tweak some things. But it can usually get you ~95% of the way there. See migrating below for some tips.
Install it:
npm install -g cjs-to-es6
Then run it:
cjs-to-es6 [ --verbose ] files/directories...
Examples:
cjs-to-es6 index.js # convert a single file cjs-to-es6 lib/ # convert all files in a directory cjs-to-es6 foo.js bar.js lib/ # convert many files/directories
All files are modified in-place.
In comes CommonJS:
var flimshaw = require('flimshaw'); var twentyEightSkidoo = require('twenty-eight').skidoo;exports.flubTheDub = 'flubTheDub'; module.exports = 'zings';
Out goes ES6 modules:
import flimshaw from 'flimshaw'; import {skidoo as twentyEightSkidoo} from 'twenty-eight';export let flubTheDub = 'flubTheDub'; export default 'zings';
Not all uses of CommonJS have a 1-to-1 equivalent in ES6 modules. So you might have to correct some errors manually.
Use
--verboseto get detailed output, or follow these general tips:
exports must be at the top level
This is invalid:
if (clownShoes) { export default new Clown(); } else { export default new RespectableGentleman(); }
Instead do:
var result = clownShoes ? new Clown() : new RespectableGentleman(); export default result;
imports also have to be at the top level
This is invalid:
try { import MysteryModule from 'mystery-module'; } catch (err) { console.log("It's a mystery!"); }
There is no equivalent for this
try/
catchpattern in ES6 modules.