Browse Source

Fixed default names.

gh-109
Oskar Segersvärd 10 years ago
parent
commit
02720bfc06
  1. 10
      src/Bundle.js
  2. 4
      src/Module.js
  3. 13
      src/finalisers/cjs.js
  4. 11
      src/finalisers/shared/getInteropBlock.js

10
src/Bundle.js

@ -65,6 +65,16 @@ export default class Bundle {
// As a last step, deconflict all identifier names, once. // As a last step, deconflict all identifier names, once.
this.scope.deconflict(); this.scope.deconflict();
// Alias the default import to the external module named
// for external modules that don't need named imports.
this.externalModules.forEach( module => {
const externalDefault = module.exports.lookup( 'default' );
if ( externalDefault && !module.needsNamed ) {
externalDefault.name = module.name;
}
});
}); });
} }

4
src/Module.js

@ -601,7 +601,9 @@ export default class Module {
if ( id.module && id.module.isExternal ) { if ( id.module && id.module.isExternal ) {
replacements[ name ] = id.originalName === 'default' ? replacements[ name ] = id.originalName === 'default' ?
`${id.module.name}['default']` : // default names are always directly accessed
id.name :
// other names are indirectly accessed
`${id.module.name}.${id.originalName}`; `${id.module.name}.${id.originalName}`;
} }
}); });

13
src/finalisers/cjs.js

@ -1,3 +1,4 @@
import getInteropBlock from './shared/getInteropBlock';
import getExportBlock from './shared/getExportBlock'; import getExportBlock from './shared/getExportBlock';
export default function cjs ( bundle, magicString, { exportMode }, options ) { export default function cjs ( bundle, magicString, { exportMode }, options ) {
@ -5,16 +6,8 @@ export default function cjs ( bundle, magicString, { exportMode }, options ) {
// TODO handle empty imports, once they're supported // TODO handle empty imports, once they're supported
const importBlock = bundle.externalModules const importBlock = bundle.externalModules
.map( module => { .map( module => `var ${module.name} = require('${module.id}');`)
let requireStatement = `var ${module.name} = require('${module.id}');`; .concat( getInteropBlock( bundle ) )
if ( module.needsDefault ) {
requireStatement += '\n' + ( module.needsNamed ? `var ${module.name}__default = ` : `${module.name} = ` ) +
`'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`;
}
return requireStatement;
})
.join( '\n' ); .join( '\n' );
if ( importBlock ) { if ( importBlock ) {

11
src/finalisers/shared/getInteropBlock.js

@ -1,13 +1,12 @@
export default function getInteropBlock ( bundle ) { export default function getInteropBlock ( bundle ) {
return bundle.externalModules return bundle.externalModules
.map( module => { .map( module => {
if ( !module.exports.inScope( 'default' ) ) return; const def = module.exports.lookup( 'default' );
if ( module.needsNamed ) { if ( !def ) return;
return `var ${module.name}__default = 'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`;
} else { return ( module.needsNamed ? 'var ' : '' ) +
return `${module.name} = 'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`; `${def.name} = 'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`;
}
}) })
.filter( Boolean ) .filter( Boolean )
.join( '\n' ); .join( '\n' );

Loading…
Cancel
Save