diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js index ac8a8e2889..242f9e3753 100644 --- a/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/src/index.js @@ -2,6 +2,7 @@ import hoistVariables from "babel-helper-hoist-variables"; import template from "babel-template"; +import syntax from "babel-plugin-syntax-dynamic-import"; let buildTemplate = template(` SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) { @@ -22,6 +23,9 @@ let buildExportAll = template(` } `); + +const TYPE_IMPORT = "Import"; + export default function ({ types: t }) { let IGNORE_REASSIGNMENT_SYMBOL = Symbol(); @@ -68,7 +72,17 @@ export default function ({ types: t }) { }; return { + inherits: syntax, + visitor: { + + CallExpression(path, state) { + if (path.node.callee.type === TYPE_IMPORT) { + let contextIdent = state.contextIdent; + path.replaceWith(t.callExpression(t.memberExpression(contextIdent, t.identifier("import")), path.node.arguments)); + } + }, + ReferencedIdentifier(path, state) { if (path.node.name == "__moduleName" && !path.scope.hasBinding("__moduleName")) { path.replaceWith(t.memberExpression(state.contextIdent, t.identifier("id"))); diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js new file mode 100644 index 0000000000..6e6ea63962 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/actual.js @@ -0,0 +1,6 @@ +export function lazyLoadOperation () { + return import('./x') + .then(function (x) { + x.y(); + }); +} diff --git a/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js new file mode 100644 index 0000000000..de2b2da619 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-modules-systemjs/test/fixtures/systemjs/dynamic-import/expected.js @@ -0,0 +1,16 @@ +System.register([], function (_export, _context) { + "use strict"; + + function lazyLoadOperation() { + return _context.import('./x').then(function (x) { + x.y(); + }); + } + + _export('lazyLoadOperation', lazyLoadOperation); + + return { + setters: [], + execute: function () {} + }; +});