Browse Source

Fixed default names.

gh-109
Oskar Segersvärd 9 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.
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 ) {
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}`;
}
});

13
src/finalisers/cjs.js

@ -1,3 +1,4 @@
import getInteropBlock from './shared/getInteropBlock';
import getExportBlock from './shared/getExportBlock';
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
const importBlock = bundle.externalModules
.map( module => {
let requireStatement = `var ${module.name} = require('${module.id}');`;
if ( module.needsDefault ) {
requireStatement += '\n' + ( module.needsNamed ? `var ${module.name}__default = ` : `${module.name} = ` ) +
`'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`;
}
return requireStatement;
})
.map( module => `var ${module.name} = require('${module.id}');`)
.concat( getInteropBlock( bundle ) )
.join( '\n' );
if ( importBlock ) {

11
src/finalisers/shared/getInteropBlock.js

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

Loading…
Cancel
Save