diff --git a/src/finalisers/es.js b/src/finalisers/es.js index 319d3981c29..c0c367a39fd 100644 --- a/src/finalisers/es.js +++ b/src/finalisers/es.js @@ -6,10 +6,6 @@ function notDefault ( name ) { export default function es ( bundle, magicString, { intro, outro } ) { const importBlock = bundle.externalModules - .filter( module => { - const imported = keys( module.declarations ); - return imported.length !== 1 || imported[0][0] !== '*'; - }) .map( module => { const specifiers = []; const specifiersList = [specifiers]; @@ -36,7 +32,7 @@ export default function es ( bundle, magicString, { intro, outro } ) { } } - const namespaceSpecifier = module.declarations['*'] ? `* as ${module.name}` : null; // TODO prevent unnecessary namespace import, e.g form/external-imports + const namespaceSpecifier = module.declarations['*'] && module.declarations['*'].activated ? `* as ${module.name}` : null; // TODO prevent unnecessary namespace import, e.g form/external-imports const namedSpecifier = importedNames.length ? `{ ${importedNames.sort().join( ', ' )} }` : null; if ( namespaceSpecifier && namedSpecifier ) { diff --git a/test/form/samples/external-imports/_expected/es.js b/test/form/samples/external-imports/_expected/es.js index 59d2b5efef5..186a873c166 100644 --- a/test/form/samples/external-imports/_expected/es.js +++ b/test/form/samples/external-imports/_expected/es.js @@ -1,7 +1,6 @@ import factory from 'factory'; import { bar, foo } from 'baz'; import { forEach, port } from 'shipping-port'; -import * as containers from 'shipping-port'; import alphabet, { a } from 'alphabet'; factory( null ); diff --git a/test/form/samples/import-external-namespace-and-default/_expected/es.js b/test/form/samples/import-external-namespace-and-default/_expected/es.js index 07d61c1042c..d905940da7f 100644 --- a/test/form/samples/import-external-namespace-and-default/_expected/es.js +++ b/test/form/samples/import-external-namespace-and-default/_expected/es.js @@ -1,6 +1,5 @@ import { bar } from 'foo'; import foo__default from 'foo'; -import * as foo from 'foo'; console.log( bar ); diff --git a/test/form/samples/import-namespace/_config.js b/test/form/samples/import-namespace/_config.js new file mode 100644 index 00000000000..9724d8bcd61 --- /dev/null +++ b/test/form/samples/import-namespace/_config.js @@ -0,0 +1,5 @@ +module.exports = { + options: { + external: ['foo', 'bar'] + } +}; \ No newline at end of file diff --git a/test/form/samples/import-namespace/_expected/amd.js b/test/form/samples/import-namespace/_expected/amd.js new file mode 100644 index 00000000000..181ac22eb94 --- /dev/null +++ b/test/form/samples/import-namespace/_expected/amd.js @@ -0,0 +1,6 @@ +define(['foo', 'bar'], function (foo, bar) { 'use strict'; + + foo.x(); + console.log(bar); + +}); diff --git a/test/form/samples/import-namespace/_expected/cjs.js b/test/form/samples/import-namespace/_expected/cjs.js new file mode 100644 index 00000000000..9514c431621 --- /dev/null +++ b/test/form/samples/import-namespace/_expected/cjs.js @@ -0,0 +1,7 @@ +'use strict'; + +var foo = require('foo'); +var bar = require('bar'); + +foo.x(); +console.log(bar); diff --git a/test/form/samples/import-namespace/_expected/es.js b/test/form/samples/import-namespace/_expected/es.js new file mode 100644 index 00000000000..9a6cd20ec37 --- /dev/null +++ b/test/form/samples/import-namespace/_expected/es.js @@ -0,0 +1,5 @@ +import { x } from 'foo'; +import * as bar from 'bar'; + +x(); +console.log(bar); diff --git a/test/form/samples/import-namespace/_expected/iife.js b/test/form/samples/import-namespace/_expected/iife.js new file mode 100644 index 00000000000..2b09a1bfe55 --- /dev/null +++ b/test/form/samples/import-namespace/_expected/iife.js @@ -0,0 +1,7 @@ +(function (foo,bar) { + 'use strict'; + + foo.x(); + console.log(bar); + +}(foo,bar)); diff --git a/test/form/samples/import-namespace/_expected/umd.js b/test/form/samples/import-namespace/_expected/umd.js new file mode 100644 index 00000000000..46ba424f126 --- /dev/null +++ b/test/form/samples/import-namespace/_expected/umd.js @@ -0,0 +1,10 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('foo'), require('bar')) : + typeof define === 'function' && define.amd ? define(['foo', 'bar'], factory) : + (factory(global.foo,global.bar)); +}(this, (function (foo,bar) { 'use strict'; + + foo.x(); + console.log(bar); + +}))); diff --git a/test/form/samples/import-namespace/main.js b/test/form/samples/import-namespace/main.js new file mode 100644 index 00000000000..0c93e7b69b8 --- /dev/null +++ b/test/form/samples/import-namespace/main.js @@ -0,0 +1,5 @@ +import * as foo from 'foo'; +import * as bar from 'bar'; + +foo.x(); +console.log(bar); \ No newline at end of file diff --git a/test/form/samples/no-treeshake/_expected/es.js b/test/form/samples/no-treeshake/_expected/es.js index ddcec9b9c13..be11fa60f42 100644 --- a/test/form/samples/no-treeshake/_expected/es.js +++ b/test/form/samples/no-treeshake/_expected/es.js @@ -1,5 +1,4 @@ import { value } from 'external'; -import * as external from 'external'; var foo = 'unused';