diff --git a/src/finalisers/cjs.js b/src/finalisers/cjs.js index 3a56ac9..4651409 100644 --- a/src/finalisers/cjs.js +++ b/src/finalisers/cjs.js @@ -3,17 +3,24 @@ import getExportBlock from './shared/getExportBlock.js'; export default function cjs ( bundle, magicString, { exportMode }, options ) { let intro = options.useStrict === false ? `` : `'use strict';\n\n`; + const hasDefaultImport = bundle.externalModules.some( mod => mod.declarations.default); + + if (hasDefaultImport) { + intro += `function _interopRequire (id) { var ex = require(id); return 'default' in ex ? ex['default'] : ex; }\n\n`; + } + // TODO handle empty imports, once they're supported const importBlock = bundle.externalModules .map( module => { - let requireStatement = `var ${module.name} = require('${module.id}');`; - if ( module.declarations.default ) { - requireStatement += '\n' + ( module.exportsNames ? `var ${module.name}__default = ` : `${module.name} = ` ) + - `'default' in ${module.name} ? ${module.name}['default'] : ${module.name};`; + let importStatement = `var ${module.name} = _interopRequire('${module.id}');`; + if (module.exportsNames) { + importStatement += `\nvar ${module.name}__default = ${module.name};`; + } + return importStatement; + } else { + return `var ${module.name} = require('${module.id}');`; } - - return requireStatement; }) .join( '\n' ); diff --git a/test/form/external-imports-custom-names/_expected/cjs.js b/test/form/external-imports-custom-names/_expected/cjs.js index e83d17d..7c31c60 100644 --- a/test/form/external-imports-custom-names/_expected/cjs.js +++ b/test/form/external-imports-custom-names/_expected/cjs.js @@ -1,7 +1,8 @@ 'use strict'; -var $ = require('jquery'); -$ = 'default' in $ ? $['default'] : $; +function _interopRequire (id) { var ex = require(id); return 'default' in ex ? ex['default'] : ex; } + +var $ = _interopRequire('jquery'); $( function () { $( 'body' ).html( '

hello world!

' ); diff --git a/test/form/external-imports/_expected/cjs.js b/test/form/external-imports/_expected/cjs.js index 6c20bcc..6cfae7f 100644 --- a/test/form/external-imports/_expected/cjs.js +++ b/test/form/external-imports/_expected/cjs.js @@ -1,14 +1,15 @@ 'use strict'; -var factory = require('factory'); -factory = 'default' in factory ? factory['default'] : factory; +function _interopRequire (id) { var ex = require(id); return 'default' in ex ? ex['default'] : ex; } + +var factory = _interopRequire('factory'); var baz = require('baz'); var containers = require('shipping-port'); -var alphabet = require('alphabet'); -var alphabet__default = 'default' in alphabet ? alphabet['default'] : alphabet; +var alphabet = _interopRequire('alphabet'); +var alphabet__default = alphabet; factory( null ); baz.foo( baz.bar, containers.port ); containers.forEach( console.log, console ); console.log( alphabet.a ); -console.log( alphabet__default.length ); +console.log( alphabet__default.length ); \ No newline at end of file