Skip to content

Commit f7d07e4

Browse files
TimerSpaceK33z
authored andcommitted
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 # Conflicts: # package.json # packages/babel-preset-react-app/package.json # packages/babel-preset-react-cy-app/index.js # packages/react-cy-scripts/config/webpack.config.dev.js # packages/react-cy-scripts/config/webpack.config.prod.js
1 parent 23e4fe0 commit f7d07e4

File tree

4 files changed

+31
-25
lines changed

4 files changed

+31
-25
lines changed

packages/babel-preset-react-cy-app/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ const plugins = [
2626
[require.resolve('babel-plugin-transform-react-jsx'), {
2727
useBuiltIns: true
2828
}],
29+
// Enables parsing of import()
30+
require.resolve('babel-plugin-syntax-dynamic-import')
2931
];
3032

3133
// This is similar to how `env` works in Babel:

packages/react-cy-scripts/config/webpack.config.dev.js

+2
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ module.exports = {
9696
// @remove-on-eject-end
9797
module: {
9898
rules: [
99+
// Disable require.ensure as it's not a standard language feature.
100+
{ parser: { requireEnsure: false } },
99101
// ** ADDING/UPDATING LOADERS **
100102
// The "url" loader handles all assets unless explicitly excluded.
101103
// The `exclude` list *must* be updated with every change to loader extensions.

packages/react-cy-scripts/config/webpack.config.prod.js

+2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ module.exports = {
100100
// @remove-on-eject-end
101101
module: {
102102
rules: [
103+
// Disable require.ensure as it's not a standard language feature.
104+
{ parser: { requireEnsure: false } },
103105
// ** ADDING/UPDATING LOADERS **
104106
// The "url" loader handles all assets unless explicitly excluded.
105107
// The `exclude` list *must* be updated with every change to loader extensions.

packages/react-cy-scripts/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)