Skip to content

Instantly share code, notes, and snippets.

@bouzuya
Last active June 22, 2016 05:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bouzuya/26c9e1cb52f58fa54b87497717bb85ce to your computer and use it in GitHub Desktop.
Save bouzuya/26c9e1cb52f58fa54b87497717bb85ce to your computer and use it in GitHub Desktop.
ES Modules と TypeScript での CommonJS interop

ECMAScript 2015 Language Specification – ECMA-262 6th Edition

TypeScript

// TypeScript の import の挙動
import v from "mod";        // var v = require('mod').default;
import * as ns from "mod";  // var ns = require('mod');
import {x} from "mod";      // var x = require('mod').x;
import {x as v} from "mod"; // var v = require('mod').x;
import "mod";               // require('mod');
// TypeScript の export の挙動
export var v;                  // module.exports.v = v;
export default function f(){}; // module.exports.default = function f() {};
export default function(){};   // module.exports.default = function() {};
export default 42;             // module.exports.default = 42;
export {x};                    // module.exports.x = x;
export {v as x};               // module.exports.x = v;
export {x} from "mod";         // module.exports.x = require('mod').x;
export {v as x} from "mod";    // module.exports.x = require('mod').v;
export * from "mod";           // module.exports = require('mod');

Babel

// Babel の import の挙動
import v from "mod";        // var x = ((obj) => obj && obj.__esModule ? obj : { default: obj })(require('mod')).default;
import * as ns from "mod";  // var ns = ((obj) => obj && obj.__esModule ? obj : { default: obj /* ... */ })(require('mod')); // /* ... */ では obj の for in && hasOwnProperty で prop をコピー
import {x} from "mod";      // var x = require('mod').x;
import {x as v} from "mod"; // var v = require('mod').x;
import "mod";               // require('mod');
// Babel の export の挙動
export var v;                  // ?
export default function f(){}; // ?
export default function(){};   // ?
export default 42;             // ?
export {x};                    // ?
export {v as x};               // ?
export {x} from "mod";         // ?
export {v as x} from "mod";    // ?
export * from "mod";           // ?

Node.js

https://github.com/nodejs/node-eps/blob/master/002-es6-modules.md#5411-examples

import v from "mod";        // var v = require('mod');
import * as ns from "mod";  // var ns = { get default() { return require('mod'); }, /* ... */ };
import {x} from "mod";      // ???
import {x as v} from "mod"; // ???
import "mod";               // ???
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment