diff --git a/src/Bundle.js b/src/Bundle.js index 83ee975..b70dd39 100644 --- a/src/Bundle.js +++ b/src/Bundle.js @@ -65,6 +65,16 @@ export default class Bundle { return this.fetchModule( this.entryPath, null ) .then( entryModule => { this.entryModule = entryModule; + + if ( entryModule.exports.default ) { + let defaultExportName = makeLegalIdentifier( basename( this.entryPath ).slice( 0, -extname( this.entryPath ).length ) ); + while ( entryModule.ast._scope.contains( defaultExportName ) ) { + defaultExportName = `_${defaultExportName}`; + } + + entryModule.suggestName( 'default', defaultExportName ); + } + return entryModule.expandAllStatements( true ); }) .then( statements => { @@ -174,7 +184,7 @@ export default class Bundle { const namespaceBlock = this.internalNamespaceModules.map( module => { const exportKeys = keys( module.exports ); - return `var ${module.suggestedNames['*']} = {\n` + + return `var ${module.getCanonicalName('*')} = {\n` + exportKeys.map( key => `${indentString}get ${key} () { return ${module.getCanonicalName(key)}; }` ).join( ',\n' ) + `\n};\n\n`; }).join( '' ); diff --git a/src/Module.js b/src/Module.js index 121001a..678ffe8 100644 --- a/src/Module.js +++ b/src/Module.js @@ -219,7 +219,10 @@ export default class Module { importDeclaration.module = module; if ( importDeclaration.name === 'default' ) { - module.suggestName( 'default', importDeclaration.localName ); + // TODO this seems ropey + const localName = importDeclaration.localName; + const suggestion = has( this.suggestedNames, localName ) ? this.suggestedNames[ localName ] : localName; + module.suggestName( 'default', suggestion ); } if ( module.isExternal ) { diff --git a/src/finalisers/cjs.js b/src/finalisers/cjs.js index 9dd2bda..57d4280 100644 --- a/src/finalisers/cjs.js +++ b/src/finalisers/cjs.js @@ -26,7 +26,7 @@ export default function cjs ( bundle, magicString, exportMode ) { let exportBlock; if ( exportMode === 'default' && bundle.entryModule.exports.default ) { - exportBlock = `module.exports = ${bundle.entryModule.suggestedNames.default};`; + exportBlock = `module.exports = ${bundle.entryModule.getCanonicalName('default')};`; } else if ( exportMode === 'named' ) { exportBlock = keys( bundle.entryModule.exports ) .map( key => {