Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
unflag experimentalDynamicImport
  • Loading branch information
guybedford committed Jun 4, 2018
1 parent d110564 commit 4d4ec4c
Show file tree
Hide file tree
Showing 18 changed files with 69 additions and 111 deletions.
12 changes: 4 additions & 8 deletions src/Chunk.ts
Expand Up @@ -748,15 +748,14 @@ export default class Chunk {

const n = options.compact ? '' : '\n';

if (this.graph.dynamicImport) this.prepareDynamicImports();
this.prepareDynamicImports();

const renderOptions: RenderOptions = {
compact: options.compact,
freeze: options.freeze !== false,
namespaceToStringTag: options.namespaceToStringTag === true,
indent: this.indentString,
format: options.format,
dynamicImport: this.graph.dynamicImport
format: options.format
};

// if an entry point facade, inline the execution list to avoid loading latency
Expand Down Expand Up @@ -1007,11 +1006,8 @@ export default class Chunk {
renderedDependency.id = relPath;
}

let needsAmdModule = false;
if (this.graph.dynamicImport) {
this.finaliseDynamicImports();
needsAmdModule = this.finaliseImportMetas(options);
}
this.finaliseDynamicImports();
let needsAmdModule = this.finaliseImportMetas(options);

const hasExports =
this.renderedDeclarations.exports.length !== 0 ||
Expand Down
126 changes: 57 additions & 69 deletions src/Graph.ts
Expand Up @@ -41,7 +41,6 @@ export default class Graph {
acornParse: acorn.IParse;
cachedModules: Map<string, ModuleJSON>;
context: string;
dynamicImport: boolean;
externalModules: ExternalModule[] = [];
getModuleContext: (id: string) => string;
hasLoaders: boolean;
Expand Down Expand Up @@ -213,26 +212,19 @@ export default class Graph {
this.acornOptions = options.acorn || {};
const acornPluginsToInject = [];

this.dynamicImport =
typeof options.experimentalDynamicImport === 'boolean'
? options.experimentalDynamicImport
: false;

if (this.dynamicImport) {
this.resolveDynamicImport = first(
[
...this.plugins.map(plugin => plugin.resolveDynamicImport).filter(Boolean),
<ResolveDynamicImportHook>function(specifier, parentId) {
return typeof specifier === 'string' && this.resolveId(specifier, parentId);
}
].map(resolveDynamicImport => resolveDynamicImport.bind(this.pluginContext))
);
acornPluginsToInject.push(injectDynamicImportPlugin);
acornPluginsToInject.push(injectImportMeta);
this.acornOptions.plugins = this.acornOptions.plugins || {};
this.acornOptions.plugins.dynamicImport = true;
this.acornOptions.plugins.importMeta = true;
}
this.resolveDynamicImport = first(
[
...this.plugins.map(plugin => plugin.resolveDynamicImport).filter(Boolean),
<ResolveDynamicImportHook>function(specifier, parentId) {
return typeof specifier === 'string' && this.resolveId(specifier, parentId);
}
].map(resolveDynamicImport => resolveDynamicImport.bind(this.pluginContext))
);
acornPluginsToInject.push(injectDynamicImportPlugin);
acornPluginsToInject.push(injectImportMeta);
this.acornOptions.plugins = this.acornOptions.plugins || {};
this.acornOptions.plugins.dynamicImport = true;
this.acornOptions.plugins.importMeta = true;

acornPluginsToInject.push(...ensureArray(options.acornInjectPlugins));
this.acornParse = acornPluginsToInject.reduce((acc, plugin) => plugin(acc), acorn).parse;
Expand Down Expand Up @@ -561,13 +553,11 @@ export default class Graph {
if (!depModule.isEntryPoint && !depModule.chunkAlias) visit(<Module>depModule);
}

if (this.dynamicImport) {
for (let dynamicModule of module.dynamicImportResolutions) {
if (dynamicModule.resolution instanceof Module) {
if (dynamicImports.indexOf(dynamicModule.resolution) === -1) {
dynamicImports.push(dynamicModule.resolution);
dynamicImportAliases.push(dynamicModule.alias);
}
for (let dynamicModule of module.dynamicImportResolutions) {
if (dynamicModule.resolution instanceof Module) {
if (dynamicImports.indexOf(dynamicModule.resolution) === -1) {
dynamicImports.push(dynamicModule.resolution);
dynamicImportAliases.push(dynamicModule.alias);
}
}
}
Expand Down Expand Up @@ -733,48 +723,46 @@ Try defining "${chunkName}" first in the manualChunks definitions of the Rollup

private fetchAllDependencies(module: Module) {
// resolve and fetch dynamic imports where possible
const fetchDynamicImportsPromise = !this.dynamicImport
? Promise.resolve()
: Promise.all(
module.getDynamicImportExpressions().map((dynamicImportExpression, index) => {
return Promise.resolve(
this.resolveDynamicImport.call(this.pluginContext, dynamicImportExpression, module.id)
).then(replacement => {
if (!replacement) {
module.dynamicImportResolutions[index] = {
alias: undefined,
resolution: undefined
};
return;
}
const alias = getAliasName(
replacement,
typeof dynamicImportExpression === 'string' ? dynamicImportExpression : undefined
);
if (typeof dynamicImportExpression !== 'string') {
module.dynamicImportResolutions[index] = { alias, resolution: replacement };
} else if (this.isExternal(replacement, module.id, true)) {
let externalModule;
if (!this.moduleById.has(replacement)) {
externalModule = new ExternalModule({
graph: this,
id: replacement
});
this.externalModules.push(externalModule);
this.moduleById.set(replacement, module);
} else {
externalModule = <ExternalModule>this.moduleById.get(replacement);
}
module.dynamicImportResolutions[index] = { alias, resolution: externalModule };
externalModule.exportsNamespace = true;
} else {
return this.fetchModule(replacement, module.id).then(depModule => {
module.dynamicImportResolutions[index] = { alias, resolution: depModule };
});
}
const fetchDynamicImportsPromise = Promise.all(
module.getDynamicImportExpressions().map((dynamicImportExpression, index) => {
return Promise.resolve(
this.resolveDynamicImport.call(this.pluginContext, dynamicImportExpression, module.id)
).then(replacement => {
if (!replacement) {
module.dynamicImportResolutions[index] = {
alias: undefined,
resolution: undefined
};
return;
}
const alias = getAliasName(
replacement,
typeof dynamicImportExpression === 'string' ? dynamicImportExpression : undefined
);
if (typeof dynamicImportExpression !== 'string') {
module.dynamicImportResolutions[index] = { alias, resolution: replacement };
} else if (this.isExternal(replacement, module.id, true)) {
let externalModule;
if (!this.moduleById.has(replacement)) {
externalModule = new ExternalModule({
graph: this,
id: replacement
});
this.externalModules.push(externalModule);
this.moduleById.set(replacement, module);
} else {
externalModule = <ExternalModule>this.moduleById.get(replacement);
}
module.dynamicImportResolutions[index] = { alias, resolution: externalModule };
externalModule.exportsNamespace = true;
} else {
return this.fetchModule(replacement, module.id).then(depModule => {
module.dynamicImportResolutions[index] = { alias, resolution: depModule };
});
})
).then(() => {});
}
});
})
).then(() => {});
fetchDynamicImportsPromise.catch(() => {});

return Promise.all(
Expand Down
8 changes: 3 additions & 5 deletions src/Module.ts
Expand Up @@ -189,11 +189,9 @@ export default class Module {
this.graph = graph;
this.comments = [];

if (graph.dynamicImport) {
this.dynamicImports = [];
this.importMetas = [];
this.dynamicImportResolutions = [];
}
this.dynamicImports = [];
this.importMetas = [];
this.dynamicImportResolutions = [];
this.isEntryPoint = false;
this.execIndex = null;
this.entryPointsHash = new Uint8Array(10);
Expand Down
1 change: 0 additions & 1 deletion src/rollup/types.d.ts
Expand Up @@ -197,7 +197,6 @@ export interface InputOptions {
context?: string;
moduleContext?: string | ((id: string) => string) | { [id: string]: string };
watch?: WatcherOptions;
experimentalDynamicImport?: boolean;
inlineDynamicImports?: boolean;
experimentalCodeSplitting?: boolean;
preserveSymlinks?: boolean;
Expand Down
3 changes: 1 addition & 2 deletions src/utils/mergeOptions.ts
Expand Up @@ -202,7 +202,6 @@ function getInputOptions(
cache: getOption('cache'),
context: config.context,
experimentalCodeSplitting: getOption('experimentalCodeSplitting'),
experimentalDynamicImport: getOption('experimentalDynamicImport'),
experimentalPreserveModules: getOption('experimentalPreserveModules'),
external: getExternal(config, command),
inlineDynamicImports: getOption('inlineDynamicImports', false),
Expand Down Expand Up @@ -233,7 +232,7 @@ function getInputOptions(
}

if (!inputOptions.experimentalCodeSplitting) {
if (inputOptions.experimentalDynamicImport) inputOptions.inlineDynamicImports = true;
inputOptions.inlineDynamicImports = true;
if (inputOptions.manualChunks)
error({
code: 'INVALID_OPTION',
Expand Down
1 change: 0 additions & 1 deletion src/utils/renderHelpers.ts
Expand Up @@ -7,7 +7,6 @@ export interface RenderOptions {
namespaceToStringTag: boolean;
indent: string;
format: string;
dynamicImport: boolean;
}

export interface NodeRenderOptions {
Expand Down
1 change: 0 additions & 1 deletion test/chunking-form/index.js
Expand Up @@ -28,7 +28,6 @@ describe('chunking form', () => {
{
input: [samples + '/' + dir + '/main.js'],
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
onwarn: msg => {
if (/No name was provided for/.test(msg)) return;
if (/as external dependency/.test(msg)) return;
Expand Down
5 changes: 1 addition & 4 deletions test/form/samples/import-meta-url/_config.js
@@ -1,6 +1,3 @@
module.exports = {
description: 'import.meta.url support',
options: {
experimentalDynamicImport: true
}
description: 'import.meta.url support'
};
3 changes: 1 addition & 2 deletions test/function/samples/compact/_config.js
@@ -1,8 +1,7 @@
module.exports = {
description: 'compact output with compact: true',
options: {
external: ['external'],
experimentalDynamicImport: true
external: ['external']
},
bundleOptions: {
compact: true,
Expand Down
1 change: 0 additions & 1 deletion test/function/samples/dynamic-import-duplicates/_config.js
Expand Up @@ -4,7 +4,6 @@ var path = require('path');
module.exports = {
description: 'Dynamic import inlining',
options: {
experimentalDynamicImport: true,
plugins: [
{
resolveDynamicImport(specifier, parent) {
Expand Down
1 change: 0 additions & 1 deletion test/function/samples/dynamic-import-existing/_config.js
Expand Up @@ -4,7 +4,6 @@ var path = require('path');
module.exports = {
description: 'Dynamic import inlining when resolution id is a module in the bundle',
options: {
experimentalDynamicImport: true,
plugins: [
{
resolveDynamicImport(specifier, parent) {
Expand Down
1 change: 0 additions & 1 deletion test/function/samples/dynamic-import-expression/_config.js
Expand Up @@ -3,7 +3,6 @@ var assert = require('assert');
module.exports = {
description: 'Dynamic import expression replacement',
options: {
experimentalDynamicImport: true,
plugins: [
{
resolveDynamicImport(specifier, parent) {
Expand Down
1 change: 0 additions & 1 deletion test/function/samples/dynamic-import-inlining/_config.js
Expand Up @@ -4,7 +4,6 @@ var path = require('path');
module.exports = {
description: 'Dynamic import inlining',
options: {
experimentalDynamicImport: true,
plugins: [
{
resolveDynamicImport(specifier, parent) {
Expand Down
1 change: 0 additions & 1 deletion test/function/samples/dynamic-import-rewriting/_config.js
Expand Up @@ -3,7 +3,6 @@ var assert = require('assert');
module.exports = {
description: 'Dynamic import string specifier resolving',
options: {
experimentalDynamicImport: true,
external: ['asdf'],
plugins: [
{
Expand Down
3 changes: 0 additions & 3 deletions test/function/samples/import-meta-url-compact/_config.js
Expand Up @@ -4,9 +4,6 @@ const URL = require('url-parse');

module.exports = {
description: 'import.meta.url support',
options: {
experimentalDynamicImport: true
},
bundleOptions: {
compact: true
},
Expand Down
3 changes: 0 additions & 3 deletions test/function/samples/transparent-dynamic-inlining/_config.js
Expand Up @@ -3,9 +3,6 @@ var path = require('path');

module.exports = {
description: 'Dynamic import inlining when resolution id is a module in the bundle',
options: {
experimentalDynamicImport: true
},
code: function(code) {
assert.equal(code.indexOf('import('), -1);
assert.notEqual(code.indexOf('Promise.resolve('), -1);
Expand Down
5 changes: 0 additions & 5 deletions test/hooks/index.js
Expand Up @@ -254,7 +254,6 @@ describe('hooks', () => {
.rollup({
input: 'input',
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
plugins: [
loader({ input: '' }),
{
Expand All @@ -279,7 +278,6 @@ describe('hooks', () => {
.rollup({
input: 'input',
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
plugins: [
loader({ input: '' }),
{
Expand Down Expand Up @@ -457,7 +455,6 @@ module.exports = input;
.rollup({
input: 'input',
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
plugins: [
loader({ input: `alert('hello')` }),
{
Expand All @@ -482,7 +479,6 @@ module.exports = input;
.rollup({
input: 'input',
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
plugins: [
loader({ input: `alert('hello')` }),
{
Expand Down Expand Up @@ -525,7 +521,6 @@ module.exports = input;
.rollup({
input: 'input',
experimentalCodeSplitting: true,
experimentalDynamicImport: true,
plugins: [
loader({ input: `alert('hello')` }),
{
Expand Down
4 changes: 2 additions & 2 deletions test/misc/optionList.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 4d4ec4c

Please sign in to comment.