Skip to content

Commit e0ce425

Browse files
iansuwombleton
authored andcommitted
Use new JSX transform with React 17 (facebook#9645)
1 parent ef5bf6a commit e0ce425

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

packages/babel-preset-react-app/create.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ module.exports = function (api, opts, env) {
5454
);
5555
}
5656

57+
var hasJsxRuntime = Boolean(
58+
api.caller(caller => !!caller && caller.hasJsxRuntime)
59+
);
60+
5761
if (!isEnvDevelopment && !isEnvProduction && !isEnvTest) {
5862
throw new Error(
5963
'Using `babel-preset-react-app` requires that you specify `NODE_ENV` or ' +
@@ -95,7 +99,8 @@ module.exports = function (api, opts, env) {
9599
development: isEnvDevelopment || isEnvTest,
96100
// Will use the native built-in instead of trying to polyfill
97101
// behavior for any plugins that require one.
98-
useBuiltIns: true,
102+
...(!hasJsxRuntime ? { useBuiltIns: true } : {}),
103+
runtime: opts.runtime || 'classic',
99104
},
100105
],
101106
isTypeScriptEnabled && [require('@babel/preset-typescript').default],

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

+12-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const fs = require('fs');
1212
const path = require('path');
1313
const webpack = require('webpack');
1414
const resolve = require('resolve');
15+
const semver = require('semver');
1516
const PnpWebpackPlugin = require('pnp-webpack-plugin');
1617
const HtmlWebpackPlugin = require('html-webpack-plugin');
1718
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
@@ -33,6 +34,7 @@ const ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin');
3334
const ForkTsCheckerWebpackPlugin = require('react-dev-utils/ForkTsCheckerWebpackPlugin');
3435
const typescriptFormatter = require('react-dev-utils/typescriptFormatter');
3536
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
37+
const react = require(require.resolve('react', { paths: [paths.appPath] }));
3638
// @remove-on-eject-begin
3739
const getCacheIdentifier = require('react-dev-utils/getCacheIdentifier');
3840
// @remove-on-eject-end
@@ -400,7 +402,16 @@ module.exports = function (webpackEnv) {
400402
// @remove-on-eject-begin
401403
babelrc: false,
402404
configFile: false,
403-
presets: [require.resolve('babel-preset-react-app')],
405+
presets: [
406+
[
407+
require.resolve('babel-preset-react-app'),
408+
{
409+
runtime: semver.gte(react.version, '17.0.0-alpha.0')
410+
? 'automatic'
411+
: 'classic',
412+
},
413+
],
414+
],
404415
// Make sure we have a unique cache identifier, erring on the
405416
// side of caution.
406417
// We remove this when the user ejects because the default

0 commit comments

Comments
 (0)