diff --git a/src/babel/transformation/modules/_default.js b/src/babel/transformation/modules/_default.js index 7d2555275d..b0864376b4 100644 --- a/src/babel/transformation/modules/_default.js +++ b/src/babel/transformation/modules/_default.js @@ -63,7 +63,10 @@ var exportsVisitor = traverse.explode({ } if (!t.isExportDefaultDeclaration(node)) { - formatter.hasNonDefaultExports = true; + var onlyDefault = node.specifiers && t.isExportDefaultSpecifier(node.specifiers[0]) && node.specifiers.length === 1; + if (!onlyDefault) { + formatter.hasNonDefaultExports = true; + } } if (node.source) { @@ -95,7 +98,7 @@ export default class DefaultFormatter { } doDefaultExportInterop(node) { - return t.isExportDefaultDeclaration(node) && !this.noInteropRequireExport && !this.hasNonDefaultExports; + return (t.isExportDefaultDeclaration(node) || t.isSpecifierDefault(node)) && !this.noInteropRequireExport && !this.hasNonDefaultExports; } bumpImportOccurences(node) { diff --git a/src/babel/transformation/modules/common.js b/src/babel/transformation/modules/common.js index 1c1d0eb5cb..a1b1dbaccf 100644 --- a/src/babel/transformation/modules/common.js +++ b/src/babel/transformation/modules/common.js @@ -61,6 +61,17 @@ export default class CommonJSFormatter extends DefaultFormatter { }, true)); } + exportSpecifier(specifier, node, nodes) { + if (this.doDefaultExportInterop(specifier)) { + nodes.push(util.template("exports-default-assign", { + VALUE: specifier.local + }, true)); + return; + } else { + DefaultFormatter.prototype.exportSpecifier.apply(this, arguments); + } + } + exportDeclaration(node, nodes) { if (this.doDefaultExportInterop(node)) { var declar = node.declaration; diff --git a/src/babel/transformation/transformers/es7/export-extensions.js b/src/babel/transformation/transformers/es7/export-extensions.js index 561f3bd485..0203c30aa5 100644 --- a/src/babel/transformation/transformers/es7/export-extensions.js +++ b/src/babel/transformation/transformers/es7/export-extensions.js @@ -21,7 +21,7 @@ export function ExportNamedDeclaration(node, parent, scope) { var uid = scope.generateUidIdentifier(specifier.exported.name); nodes.push( t.importDeclaration([t.importSpecifier(uid, specifier.exported)], node.source), - t.exportNamedDeclaration(null, [t.exportSpecifier(uid, specifier.exported)]) + t.exportNamedDeclaration(null, [t.exportSpecifier(uid, t.identifier("default"))]) ); } diff --git a/test/core/fixtures/transformation/es7-export-extensions/default-commonjs/expected.js b/test/core/fixtures/transformation/es7-export-extensions/default-commonjs/expected.js index 6e836ca721..f04a206053 100644 --- a/test/core/fixtures/transformation/es7-export-extensions/default-commonjs/expected.js +++ b/test/core/fixtures/transformation/es7-export-extensions/default-commonjs/expected.js @@ -1,9 +1,5 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { - value: true -}); - var _foo = require("bar").foo; -exports.foo = _foo; +module.exports = _foo; diff --git a/test/core/fixtures/transformation/es7-export-extensions/default-es6/expected.js b/test/core/fixtures/transformation/es7-export-extensions/default-es6/expected.js index 396e94f2f7..631c7687bc 100644 --- a/test/core/fixtures/transformation/es7-export-extensions/default-es6/expected.js +++ b/test/core/fixtures/transformation/es7-export-extensions/default-es6/expected.js @@ -1,4 +1,4 @@ "use strict"; import { foo as _foo } from "bar"; -export { _foo as foo }; +export { _foo as default };