Skip to content

Commit 9b5cccf

Browse files
authored
Add support for dynamic import & disable require.ensure (facebook#1538)
* Disable require.ensure * Replace require.ensure with import * Add babel plugin for parsing import() * Get the default * Upgrade babel-eslint to support dynamic import * Fix dep * Update deps
1 parent e276ddb commit 9b5cccf

File tree

3 files changed

+29
-25
lines changed

3 files changed

+29
-25
lines changed

config/webpack.config.dev.js

+2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ module.exports = {
106106
// @remove-on-eject-end
107107
module: {
108108
rules: [
109+
// Disable require.ensure as it's not a standard language feature.
110+
{ parser: { requireEnsure: false } },
109111
// First, run the linter.
110112
// It's important to do this before Babel processes the JS.
111113
{

config/webpack.config.prod.js

+2
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ module.exports = {
111111
// @remove-on-eject-end
112112
module: {
113113
rules: [
114+
// Disable require.ensure as it's not a standard language feature.
115+
{ parser: { requireEnsure: false } },
114116
// First, run the linter.
115117
// It's important to do this before Babel processes the JS.
116118
{

fixtures/kitchensink/src/App.js

+25-25
Original file line numberDiff line numberDiff line change
@@ -47,79 +47,79 @@ class App extends Component {
4747
const feature = location.hash.slice(1);
4848
switch (feature) {
4949
case 'array-destructuring':
50-
require.ensure([], () => this.setFeature(require('./features/syntax/ArrayDestructuring').default));
50+
import('./features/syntax/ArrayDestructuring').then(f => this.setFeature(f.default));
5151
break;
5252
case 'array-spread':
53-
require.ensure([], () => this.setFeature(require('./features/syntax/ArraySpread').default));
53+
import('./features/syntax/ArraySpread').then(f => this.setFeature(f.default));
5454
break;
5555
case 'async-await':
56-
require.ensure([], () => this.setFeature(require('./features/syntax/AsyncAwait').default));
56+
import('./features/syntax/AsyncAwait').then(f => this.setFeature(f.default));
5757
break;
5858
case 'class-properties':
59-
require.ensure([], () => this.setFeature(require('./features/syntax/ClassProperties').default));
59+
import('./features/syntax/ClassProperties').then(f => this.setFeature(f.default));
6060
break;
6161
case 'computed-properties':
62-
require.ensure([], () => this.setFeature(require('./features/syntax/ComputedProperties').default));
62+
import('./features/syntax/ComputedProperties').then(f => this.setFeature(f.default));
6363
break;
6464
case 'css-inclusion':
65-
require.ensure([], () => this.setFeature(require('./features/webpack/CssInclusion').default));
65+
import('./features/webpack/CssInclusion').then(f => this.setFeature(f.default));
6666
break;
6767
case 'custom-interpolation':
68-
require.ensure([], () => this.setFeature(require('./features/syntax/CustomInterpolation').default));
68+
import('./features/syntax/CustomInterpolation').then(f => this.setFeature(f.default));
6969
break;
7070
case 'default-parameters':
71-
require.ensure([], () => this.setFeature(require('./features/syntax/DefaultParameters').default));
71+
import('./features/syntax/DefaultParameters').then(f => this.setFeature(f.default));
7272
break;
7373
case 'destructuring-and-await':
74-
require.ensure([], () => this.setFeature(require('./features/syntax/DestructuringAndAwait').default));
74+
import('./features/syntax/DestructuringAndAwait').then(f => this.setFeature(f.default));
7575
break;
7676
case 'file-env-variables':
77-
require.ensure([], () => this.setFeature(require('./features/env/FileEnvVariables').default));
77+
import('./features/env/FileEnvVariables').then(f => this.setFeature(f.default));
7878
break;
7979
case 'generators':
80-
require.ensure([], () => this.setFeature(require('./features/syntax/Generators').default));
80+
import('./features/syntax/Generators').then(f => this.setFeature(f.default));
8181
break;
8282
case 'image-inclusion':
83-
require.ensure([], () => this.setFeature(require('./features/webpack/ImageInclusion').default));
83+
import('./features/webpack/ImageInclusion').then(f => this.setFeature(f.default));
8484
break;
8585
case 'json-inclusion':
86-
require.ensure([], () => this.setFeature(require('./features/webpack/JsonInclusion').default));
86+
import('./features/webpack/JsonInclusion').then(f => this.setFeature(f.default));
8787
break;
8888
case 'node-path':
89-
require.ensure([], () => this.setFeature(require('./features/env/NodePath').default));
89+
import('./features/env/NodePath').then(f => this.setFeature(f.default));
9090
break;
9191
case 'no-ext-inclusion':
92-
require.ensure([], () => this.setFeature(require('./features/webpack/NoExtInclusion').default));
92+
import('./features/webpack/NoExtInclusion').then(f => this.setFeature(f.default));
9393
break;
9494
case 'object-destructuring':
95-
require.ensure([], () => this.setFeature(require('./features/syntax/ObjectDestructuring').default));
95+
import('./features/syntax/ObjectDestructuring').then(f => this.setFeature(f.default));
9696
break;
9797
case 'object-spread':
98-
require.ensure([], () => this.setFeature(require('./features/syntax/ObjectSpread').default));
98+
import('./features/syntax/ObjectSpread').then(f => this.setFeature(f.default));
9999
break;
100100
case 'promises':
101-
require.ensure([], () => this.setFeature(require('./features/syntax/Promises').default));
101+
import('./features/syntax/Promises').then(f => this.setFeature(f.default));
102102
break;
103103
case 'public-url':
104-
require.ensure([], () => this.setFeature(require('./features/env/PublicUrl').default));
104+
import('./features/env/PublicUrl').then(f => this.setFeature(f.default));
105105
break;
106106
case 'rest-and-default':
107-
require.ensure([], () => this.setFeature(require('./features/syntax/RestAndDefault').default));
107+
import('./features/syntax/RestAndDefault').then(f => this.setFeature(f.default));
108108
break;
109109
case 'rest-parameters':
110-
require.ensure([], () => this.setFeature(require('./features/syntax/RestParameters').default));
110+
import('./features/syntax/RestParameters').then(f => this.setFeature(f.default));
111111
break;
112112
case 'shell-env-variables':
113-
require.ensure([], () => this.setFeature(require('./features/env/ShellEnvVariables').default));
113+
import('./features/env/ShellEnvVariables').then(f => this.setFeature(f.default));
114114
break;
115115
case 'svg-inclusion':
116-
require.ensure([], () => this.setFeature(require('./features/webpack/SvgInclusion').default));
116+
import('./features/webpack/SvgInclusion').then(f => this.setFeature(f.default));
117117
break;
118118
case 'template-interpolation':
119-
require.ensure([], () => this.setFeature(require('./features/syntax/TemplateInterpolation').default));
119+
import('./features/syntax/TemplateInterpolation').then(f => this.setFeature(f.default));
120120
break;
121121
case 'unknown-ext-inclusion':
122-
require.ensure([], () => this.setFeature(require('./features/webpack/UnknownExtInclusion').default));
122+
import('./features/webpack/UnknownExtInclusion').then(f => this.setFeature(f.default));
123123
break;
124124
default: throw new Error(`Missing feature "${feature}"`);
125125
}

0 commit comments

Comments
 (0)