Skip to content

Commit 3a0b53a

Browse files
iansujustinsilvestre
authored andcommitted
Use new JSX transform with React 17 (facebook#9645)
1 parent 4babb3b commit 3a0b53a

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
@@ -14,6 +14,7 @@ const fs = require('fs');
1414
const path = require('path');
1515
const webpack = require('webpack');
1616
const resolve = require('resolve');
17+
const semver = require('semver');
1718
const PnpWebpackPlugin = require('pnp-webpack-plugin');
1819
const HtmlWebpackPlugin = require('html-webpack-plugin');
1920
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
@@ -35,6 +36,7 @@ const ModuleNotFoundPlugin = require('react-dev-utils/ModuleNotFoundPlugin');
3536
const ForkTsCheckerWebpackPlugin = require('react-dev-utils/ForkTsCheckerWebpackPlugin');
3637
const typescriptFormatter = require('react-dev-utils/typescriptFormatter');
3738
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
39+
const react = require(require.resolve('react', { paths: [paths.appPath] }));
3840
// @remove-on-eject-begin
3941
const getCacheIdentifier = require('react-dev-utils/getCacheIdentifier');
4042
// @remove-on-eject-end
@@ -402,7 +404,16 @@ module.exports = function (webpackEnv) {
402404
// @remove-on-eject-begin
403405
babelrc: false,
404406
configFile: false,
405-
presets: [require.resolve('babel-preset-react-app')],
407+
presets: [
408+
[
409+
require.resolve('babel-preset-react-app'),
410+
{
411+
runtime: semver.gte(react.version, '17.0.0-alpha.0')
412+
? 'automatic'
413+
: 'classic',
414+
},
415+
],
416+
],
406417
// Make sure we have a unique cache identifier, erring on the
407418
// side of caution.
408419
// We remove this when the user ejects because the default

0 commit comments

Comments
 (0)