diff --git a/src/transform.js b/src/transform.js index 847da88..2040bc3 100644 --- a/src/transform.js +++ b/src/transform.js @@ -69,7 +69,6 @@ export default function transform ( code, id, isEntry, ignoreGlobal, customNamed const HELPERS_NAME = deconflict( scope, globals, 'commonjsHelpers' ); // TODO technically wrong since globals isn't populated yet, but ¯\_(ツ)_/¯ const namedExports = {}; - if ( customNamedExports ) customNamedExports.forEach( name => namedExports[ name ] = true ); // TODO handle transpiled modules let shouldWrap = /__esModule/.test( code ); @@ -224,28 +223,32 @@ export default function transform ( code, id, isEntry, ignoreGlobal, customNamed namedExportDeclarations.push( exportModuleExports ); } + const name = getName( id ); + + function addExport ( x ) { + let declaration; + + if ( x === name ) { + const deconflicted = deconflict( scope, globals, name ); + declaration = `var ${deconflicted} = ${moduleName}.${x};\nexport { ${deconflicted} as ${x} };`; + } else { + declaration = `export var ${x} = ${moduleName}.${x};`; + } + + namedExportDeclarations.push( declaration ); + } + + if ( customNamedExports ) customNamedExports.forEach( addExport ); + if ( shouldWrap ) { const args = `module${uses.exports ? ', exports' : ''}`; - const name = getName( id ); - wrapperStart = `var ${moduleName} = ${HELPERS_NAME}.createCommonjsModule(function (${args}) {\n`; wrapperEnd = `\n});`; Object.keys( namedExports ) .filter( key => !blacklistedExports[ key ] ) - .forEach( x => { - let declaration; - - if ( x === name ) { - const deconflicted = deconflict( scope, globals, name ); - declaration = `var ${deconflicted} = ${moduleName}.${x};\nexport { ${deconflicted} as ${x} };`; - } else { - declaration = `export var ${x} = ${moduleName}.${x};`; - } - - namedExportDeclarations.push( declaration ); - }); + .forEach( addExport ); } else { let hasDefaultExport = false; const names = []; diff --git a/test/function/reexports/_config.js b/test/function/reexports/_config.js new file mode 100644 index 0000000..64301d6 --- /dev/null +++ b/test/function/reexports/_config.js @@ -0,0 +1,9 @@ +const path = require( 'path' ); + +module.exports = { + pluginOptions: { + namedExports: { + [ path.resolve( __dirname, 'foo.js' ) ]: [ 'named' ] + } + } +}; diff --git a/test/function/reexports/bar.js b/test/function/reexports/bar.js new file mode 100644 index 0000000..cbf3e94 --- /dev/null +++ b/test/function/reexports/bar.js @@ -0,0 +1 @@ +exports.named = 42; diff --git a/test/function/reexports/foo.js b/test/function/reexports/foo.js new file mode 100644 index 0000000..5cc5445 --- /dev/null +++ b/test/function/reexports/foo.js @@ -0,0 +1 @@ +module.exports = require( './bar.js' ); diff --git a/test/function/reexports/main.js b/test/function/reexports/main.js new file mode 100644 index 0000000..5805d48 --- /dev/null +++ b/test/function/reexports/main.js @@ -0,0 +1,3 @@ +import { named } from './foo.js'; + +assert.equal( named, 42 ); diff --git a/test/test.js b/test/test.js index 3382c77..253deb2 100644 --- a/test/test.js +++ b/test/test.js @@ -89,7 +89,7 @@ describe( 'rollup-plugin-commonjs', () => { ( config.solo ? it.only : it )( dir, () => { return rollup({ entry: `function/${dir}/main.js`, - plugins: [ commonjs() ] + plugins: [ commonjs( config.pluginOptions ) ] }).then( bundle => { const { code } = bundle.generate({ format: 'cjs' }); if ( config.show || config.solo ) {