From 0457bb0e235f18f307c8a5b1a34d3c3d3e376bd4 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:04:08 -0400 Subject: [PATCH 1/8] Remove runtime alias hack --- packages/babel-preset-react-app/create.js | 9 +++++++++ packages/babel-preset-react-app/dependencies.js | 9 +++++++++ packages/babel-preset-react-app/package.json | 1 + packages/react-scripts/config/webpack.config.dev.js | 9 --------- packages/react-scripts/config/webpack.config.prod.js | 9 --------- packages/react-scripts/package.json | 1 - 6 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/babel-preset-react-app/create.js b/packages/babel-preset-react-app/create.js index dbc9ea98eac..f34953e3042 100644 --- a/packages/babel-preset-react-app/create.js +++ b/packages/babel-preset-react-app/create.js @@ -6,6 +6,8 @@ */ 'use strict'; +const path = require('path'); + const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -120,6 +122,13 @@ module.exports = function(api, opts, env) { // We should turn this on once the lowest version of Node LTS // supports ES Modules. useESModules: isEnvDevelopment || isEnvProduction, + // Undocumented option that lets us encapsulate our runtime, safely + // applying it without requiring it be a dependency of the consuming + // project + // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), }, ], isEnvProduction && [ diff --git a/packages/babel-preset-react-app/dependencies.js b/packages/babel-preset-react-app/dependencies.js index 6872488e80a..3d52d1bd6fb 100644 --- a/packages/babel-preset-react-app/dependencies.js +++ b/packages/babel-preset-react-app/dependencies.js @@ -6,6 +6,8 @@ */ 'use strict'; +const path = require('path'); + const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -95,6 +97,13 @@ module.exports = function(api, opts) { // We should turn this on once the lowest version of Node LTS // supports ES Modules. useESModules: isEnvDevelopment || isEnvProduction, + // Undocumented option that lets us encapsulate our runtime, safely + // applying it without requiring it be a dependency of the consuming + // project + // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), }, ], // Adds syntax support for import() diff --git a/packages/babel-preset-react-app/package.json b/packages/babel-preset-react-app/package.json index 8a75a537586..4bb3240a90c 100644 --- a/packages/babel-preset-react-app/package.json +++ b/packages/babel-preset-react-app/package.json @@ -30,6 +30,7 @@ "@babel/preset-env": "7.1.0", "@babel/preset-flow": "7.0.0", "@babel/preset-react": "7.0.0", + "@babel/runtime": "7.0.0", "babel-loader": "8.0.2", "babel-plugin-macros": "2.4.2", "babel-plugin-transform-dynamic-import": "2.1.0", diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index fb9dba5568f..ab54cc33cf2 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -144,15 +144,6 @@ module.exports = { // for React Native Web. extensions: ['.web.js', '.js', '.json', '.web.jsx', '.jsx'], alias: { - // @remove-on-eject-begin - // Resolve Babel runtime relative to react-scripts. - // It usually still works on npm 3 without this but it would be - // unfortunate to rely on, as react-scripts could be symlinked, - // and thus @babel/runtime might not be resolvable from the source. - '@babel/runtime': path.dirname( - require.resolve('@babel/runtime/package.json') - ), - // @remove-on-eject-end // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 43322611f17..fe92a483883 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -199,15 +199,6 @@ module.exports = { // for React Native Web. extensions: ['.web.js', '.js', '.json', '.web.jsx', '.jsx'], alias: { - // @remove-on-eject-begin - // Resolve Babel runtime relative to react-scripts. - // It usually still works on npm 3 without this but it would be - // unfortunate to rely on, as react-scripts could be symlinked, - // and thus @babel/runtime might not be resolvable from the source. - '@babel/runtime': path.dirname( - require.resolve('@babel/runtime/package.json') - ), - // @remove-on-eject-end // Support React Native Web // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 'react-native': 'react-native-web', diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 0738b4b74ab..d05871696de 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -22,7 +22,6 @@ }, "dependencies": { "@babel/core": "7.1.0", - "@babel/runtime": "7.0.0", "@svgr/webpack": "2.4.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", From 039681e93e6ccf3d4c3cfce41d9ed2c1b7797618 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:20:58 -0400 Subject: [PATCH 2/8] Pass absolute path to preset --- packages/babel-preset-react-app/create.js | 6 +----- .../babel-preset-react-app/dependencies.js | 6 +----- packages/babel-preset-react-app/package.json | 1 - .../react-scripts/config/webpack.config.dev.js | 18 ++++++++++++++++-- .../config/webpack.config.prod.js | 18 ++++++++++++++++-- packages/react-scripts/package.json | 1 + 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/packages/babel-preset-react-app/create.js b/packages/babel-preset-react-app/create.js index f34953e3042..5dd6e6604a2 100644 --- a/packages/babel-preset-react-app/create.js +++ b/packages/babel-preset-react-app/create.js @@ -6,8 +6,6 @@ */ 'use strict'; -const path = require('path'); - const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -126,9 +124,7 @@ module.exports = function(api, opts, env) { // applying it without requiring it be a dependency of the consuming // project // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') - ), + absoluteRuntime: opts.absoluteRuntime, }, ], isEnvProduction && [ diff --git a/packages/babel-preset-react-app/dependencies.js b/packages/babel-preset-react-app/dependencies.js index 3d52d1bd6fb..514783984c2 100644 --- a/packages/babel-preset-react-app/dependencies.js +++ b/packages/babel-preset-react-app/dependencies.js @@ -6,8 +6,6 @@ */ 'use strict'; -const path = require('path'); - const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -101,9 +99,7 @@ module.exports = function(api, opts) { // applying it without requiring it be a dependency of the consuming // project // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') - ), + absoluteRuntime: opts.absoluteRuntime, }, ], // Adds syntax support for import() diff --git a/packages/babel-preset-react-app/package.json b/packages/babel-preset-react-app/package.json index 4bb3240a90c..8a75a537586 100644 --- a/packages/babel-preset-react-app/package.json +++ b/packages/babel-preset-react-app/package.json @@ -30,7 +30,6 @@ "@babel/preset-env": "7.1.0", "@babel/preset-flow": "7.0.0", "@babel/preset-react": "7.0.0", - "@babel/runtime": "7.0.0", "babel-loader": "8.0.2", "babel-plugin-macros": "2.4.2", "babel-plugin-transform-dynamic-import": "2.1.0", diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index ab54cc33cf2..c263acebc7f 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -226,7 +226,16 @@ module.exports = { // @remove-on-eject-begin babelrc: false, configFile: false, - presets: [require.resolve('babel-preset-react-app')], + presets: [ + [ + require.resolve('babel-preset-react-app'), + { + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), + }, + ], + ], // Make sure we have a unique cache identifier, erring on the // side of caution. // We remove this when the user ejects because the default @@ -285,7 +294,12 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { helpers: true }, + { + helpers: true, + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), + }, ], ], cacheDirectory: true, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index fe92a483883..999c7f40ead 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -277,7 +277,16 @@ module.exports = { // @remove-on-eject-begin babelrc: false, configFile: false, - presets: [require.resolve('babel-preset-react-app')], + presets: [ + [ + require.resolve('babel-preset-react-app'), + { + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), + }, + ], + ], // Make sure we have a unique cache identifier, erring on the // side of caution. // We remove this when the user ejects because the default @@ -329,7 +338,12 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { helpers: true }, + { + helpers: true, + absoluteRuntime: path.dirname( + require.resolve('@babel/runtime/package.json') + ), + }, ], ], cacheDirectory: true, diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index d05871696de..0738b4b74ab 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "@babel/core": "7.1.0", + "@babel/runtime": "7.0.0", "@svgr/webpack": "2.4.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", From 0a92004920bde2bd3e50e219cf8a8a7c5c2bdaa2 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:29:12 -0400 Subject: [PATCH 3/8] Change comment --- packages/babel-preset-react-app/create.js | 5 ++--- packages/babel-preset-react-app/dependencies.js | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/babel-preset-react-app/create.js b/packages/babel-preset-react-app/create.js index 5dd6e6604a2..81d5b613c22 100644 --- a/packages/babel-preset-react-app/create.js +++ b/packages/babel-preset-react-app/create.js @@ -120,9 +120,8 @@ module.exports = function(api, opts, env) { // We should turn this on once the lowest version of Node LTS // supports ES Modules. useESModules: isEnvDevelopment || isEnvProduction, - // Undocumented option that lets us encapsulate our runtime, safely - // applying it without requiring it be a dependency of the consuming - // project + // Undocumented option that lets us encapsulate our runtime, ensuring + // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 absoluteRuntime: opts.absoluteRuntime, }, diff --git a/packages/babel-preset-react-app/dependencies.js b/packages/babel-preset-react-app/dependencies.js index 514783984c2..ab13196669d 100644 --- a/packages/babel-preset-react-app/dependencies.js +++ b/packages/babel-preset-react-app/dependencies.js @@ -95,9 +95,8 @@ module.exports = function(api, opts) { // We should turn this on once the lowest version of Node LTS // supports ES Modules. useESModules: isEnvDevelopment || isEnvProduction, - // Undocumented option that lets us encapsulate our runtime, safely - // applying it without requiring it be a dependency of the consuming - // project + // Undocumented option that lets us encapsulate our runtime, ensuring + // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 absoluteRuntime: opts.absoluteRuntime, }, From bb5f0746b5b433fd662854e9629bf289b2bb8ff1 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:36:22 -0400 Subject: [PATCH 4/8] Give a relative path to absolute runtime --- .../react-scripts/config/webpack.config.dev.js | 14 ++++++++++---- .../react-scripts/config/webpack.config.prod.js | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index c263acebc7f..e9321f907c4 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -230,8 +230,11 @@ module.exports = { [ require.resolve('babel-preset-react-app'), { - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') + absoluteRuntime: path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname( + require.resolve('@babel/runtime/package.json') + ) ), }, ], @@ -296,8 +299,11 @@ module.exports = { require.resolve('babel-preset-react-app/dependencies'), { helpers: true, - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') + absoluteRuntime: path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname( + require.resolve('@babel/runtime/package.json') + ) ), }, ], diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 999c7f40ead..c35bd63ed41 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -281,8 +281,11 @@ module.exports = { [ require.resolve('babel-preset-react-app'), { - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') + absoluteRuntime: path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname( + require.resolve('@babel/runtime/package.json') + ) ), }, ], @@ -340,8 +343,11 @@ module.exports = { require.resolve('babel-preset-react-app/dependencies'), { helpers: true, - absoluteRuntime: path.dirname( - require.resolve('@babel/runtime/package.json') + absoluteRuntime: path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname( + require.resolve('@babel/runtime/package.json') + ) ), }, ], From 5119e6e7d519f325ec2bd5c251b354b5c32a5297 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:41:13 -0400 Subject: [PATCH 5/8] Clean up config --- .../config/webpack.config.dev.js | 21 ++++++++----------- .../config/webpack.config.prod.js | 21 ++++++++----------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index e9321f907c4..bb916ba39d1 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -72,6 +72,13 @@ const getStyleLoaders = (cssOptions, preProcessor) => { return loaders; }; +// This path will correctly resolve to our @babel/runtime when invoked +// by babel-loader +const relativeRuntimePath = path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname(require.resolve('@babel/runtime/package.json')) +); + // This is the development configuration. // It is focused on developer experience and fast rebuilds. // The production configuration is different and lives in a separate file. @@ -230,12 +237,7 @@ module.exports = { [ require.resolve('babel-preset-react-app'), { - absoluteRuntime: path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname( - require.resolve('@babel/runtime/package.json') - ) - ), + absoluteRuntime: relativeRuntimePath, }, ], ], @@ -299,12 +301,7 @@ module.exports = { require.resolve('babel-preset-react-app/dependencies'), { helpers: true, - absoluteRuntime: path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname( - require.resolve('@babel/runtime/package.json') - ) - ), + absoluteRuntime: relativeRuntimePath, }, ], ], diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index c35bd63ed41..1d25927103c 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -90,6 +90,13 @@ const getStyleLoaders = (cssOptions, preProcessor) => { return loaders; }; +// This path will correctly resolve to our @babel/runtime when invoked +// by babel-loader +const relativeRuntimePath = path.relative( + path.dirname(require.resolve('babel-loader')), + path.dirname(require.resolve('@babel/runtime/package.json')) +); + // This is the production configuration. // It compiles slowly and is focused on producing a fast and minimal bundle. // The development configuration is different and lives in a separate file. @@ -281,12 +288,7 @@ module.exports = { [ require.resolve('babel-preset-react-app'), { - absoluteRuntime: path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname( - require.resolve('@babel/runtime/package.json') - ) - ), + absoluteRuntime: relativeRuntimePath, }, ], ], @@ -343,12 +345,7 @@ module.exports = { require.resolve('babel-preset-react-app/dependencies'), { helpers: true, - absoluteRuntime: path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname( - require.resolve('@babel/runtime/package.json') - ) - ), + absoluteRuntime: relativeRuntimePath, }, ], ], From 6472ed6f4049513bd0329c90a8f180106900d4f4 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 14:53:58 -0400 Subject: [PATCH 6/8] Tweak again --- packages/babel-preset-react-app/create.js | 11 ++++++++++- packages/babel-preset-react-app/dependencies.js | 12 +++++++++++- packages/babel-preset-react-app/package.json | 1 + .../react-scripts/config/webpack.config.dev.js | 16 ++-------------- .../react-scripts/config/webpack.config.prod.js | 16 ++-------------- packages/react-scripts/package.json | 1 - 6 files changed, 26 insertions(+), 31 deletions(-) diff --git a/packages/babel-preset-react-app/create.js b/packages/babel-preset-react-app/create.js index 81d5b613c22..96336a4568c 100644 --- a/packages/babel-preset-react-app/create.js +++ b/packages/babel-preset-react-app/create.js @@ -6,6 +6,8 @@ */ 'use strict'; +const path = require('path'); + const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -26,8 +28,15 @@ module.exports = function(api, opts, env) { var isEnvDevelopment = env === 'development'; var isEnvProduction = env === 'production'; var isEnvTest = env === 'test'; + var isFlowEnabled = validateBoolOption('flow', opts.flow, true); var areHelpersEnabled = validateBoolOption('helpers', opts.helpers, true); + var absoluteRuntime = opts.absoluteRuntime; + if (absoluteRuntime === true) { + absoluteRuntime = path.dirname( + require.resolve('@babel/runtime/package.json') + ); + } if (!isEnvDevelopment && !isEnvProduction && !isEnvTest) { throw new Error( @@ -123,7 +132,7 @@ module.exports = function(api, opts, env) { // Undocumented option that lets us encapsulate our runtime, ensuring // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime: opts.absoluteRuntime, + absoluteRuntime, }, ], isEnvProduction && [ diff --git a/packages/babel-preset-react-app/dependencies.js b/packages/babel-preset-react-app/dependencies.js index ab13196669d..86920ccdf14 100644 --- a/packages/babel-preset-react-app/dependencies.js +++ b/packages/babel-preset-react-app/dependencies.js @@ -6,6 +6,8 @@ */ 'use strict'; +const path = require('path'); + const validateBoolOption = (name, value, defaultValue) => { if (typeof value === 'undefined') { value = defaultValue; @@ -33,7 +35,15 @@ module.exports = function(api, opts) { var isEnvDevelopment = env === 'development'; var isEnvProduction = env === 'production'; var isEnvTest = env === 'test'; + var areHelpersEnabled = validateBoolOption('helpers', opts.helpers, false); + var absoluteRuntime = opts.absoluteRuntime; + if (absoluteRuntime === true) { + absoluteRuntime = path.dirname( + require.resolve('@babel/runtime/package.json') + ); + } + if (!isEnvDevelopment && !isEnvProduction && !isEnvTest) { throw new Error( 'Using `babel-preset-react-app` requires that you specify `NODE_ENV` or ' + @@ -98,7 +108,7 @@ module.exports = function(api, opts) { // Undocumented option that lets us encapsulate our runtime, ensuring // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime: opts.absoluteRuntime, + absoluteRuntime, }, ], // Adds syntax support for import() diff --git a/packages/babel-preset-react-app/package.json b/packages/babel-preset-react-app/package.json index 8a75a537586..4bb3240a90c 100644 --- a/packages/babel-preset-react-app/package.json +++ b/packages/babel-preset-react-app/package.json @@ -30,6 +30,7 @@ "@babel/preset-env": "7.1.0", "@babel/preset-flow": "7.0.0", "@babel/preset-react": "7.0.0", + "@babel/runtime": "7.0.0", "babel-loader": "8.0.2", "babel-plugin-macros": "2.4.2", "babel-plugin-transform-dynamic-import": "2.1.0", diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index bb916ba39d1..1c44211e181 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -72,13 +72,6 @@ const getStyleLoaders = (cssOptions, preProcessor) => { return loaders; }; -// This path will correctly resolve to our @babel/runtime when invoked -// by babel-loader -const relativeRuntimePath = path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname(require.resolve('@babel/runtime/package.json')) -); - // This is the development configuration. // It is focused on developer experience and fast rebuilds. // The production configuration is different and lives in a separate file. @@ -236,9 +229,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app'), - { - absoluteRuntime: relativeRuntimePath, - }, + { absoluteRuntime: true }, ], ], // Make sure we have a unique cache identifier, erring on the @@ -299,10 +290,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { - helpers: true, - absoluteRuntime: relativeRuntimePath, - }, + { helpers: true, absoluteRuntime: true }, ], ], cacheDirectory: true, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 1d25927103c..3df706e2966 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -90,13 +90,6 @@ const getStyleLoaders = (cssOptions, preProcessor) => { return loaders; }; -// This path will correctly resolve to our @babel/runtime when invoked -// by babel-loader -const relativeRuntimePath = path.relative( - path.dirname(require.resolve('babel-loader')), - path.dirname(require.resolve('@babel/runtime/package.json')) -); - // This is the production configuration. // It compiles slowly and is focused on producing a fast and minimal bundle. // The development configuration is different and lives in a separate file. @@ -287,9 +280,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app'), - { - absoluteRuntime: relativeRuntimePath, - }, + { absoluteRuntime: true }, ], ], // Make sure we have a unique cache identifier, erring on the @@ -343,10 +334,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { - helpers: true, - absoluteRuntime: relativeRuntimePath, - }, + { helpers: true, absoluteRuntime: true }, ], ], cacheDirectory: true, diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 0738b4b74ab..d05871696de 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -22,7 +22,6 @@ }, "dependencies": { "@babel/core": "7.1.0", - "@babel/runtime": "7.0.0", "@svgr/webpack": "2.4.1", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", From 39f2fcc16a270232d5f6c732e2abb7361c4c15b5 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 15:01:43 -0400 Subject: [PATCH 7/8] Make absolute runtime the default --- packages/babel-preset-react-app/create.js | 14 ++++++++++---- packages/babel-preset-react-app/dependencies.js | 14 ++++++++++---- .../react-scripts/config/webpack.config.dev.js | 9 ++------- .../react-scripts/config/webpack.config.prod.js | 9 ++------- 4 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/babel-preset-react-app/create.js b/packages/babel-preset-react-app/create.js index 96336a4568c..b53dd0aab23 100644 --- a/packages/babel-preset-react-app/create.js +++ b/packages/babel-preset-react-app/create.js @@ -31,9 +31,15 @@ module.exports = function(api, opts, env) { var isFlowEnabled = validateBoolOption('flow', opts.flow, true); var areHelpersEnabled = validateBoolOption('helpers', opts.helpers, true); - var absoluteRuntime = opts.absoluteRuntime; - if (absoluteRuntime === true) { - absoluteRuntime = path.dirname( + var useAbsoluteRuntime = validateBoolOption( + 'absoluteRuntime', + opts.absoluteRuntime, + true + ); + + var absoluteRuntimePath = undefined; + if (useAbsoluteRuntime) { + absoluteRuntimePath = path.dirname( require.resolve('@babel/runtime/package.json') ); } @@ -132,7 +138,7 @@ module.exports = function(api, opts, env) { // Undocumented option that lets us encapsulate our runtime, ensuring // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime, + absoluteRuntime: absoluteRuntimePath, }, ], isEnvProduction && [ diff --git a/packages/babel-preset-react-app/dependencies.js b/packages/babel-preset-react-app/dependencies.js index 86920ccdf14..19a6e74557b 100644 --- a/packages/babel-preset-react-app/dependencies.js +++ b/packages/babel-preset-react-app/dependencies.js @@ -37,9 +37,15 @@ module.exports = function(api, opts) { var isEnvTest = env === 'test'; var areHelpersEnabled = validateBoolOption('helpers', opts.helpers, false); - var absoluteRuntime = opts.absoluteRuntime; - if (absoluteRuntime === true) { - absoluteRuntime = path.dirname( + var useAbsoluteRuntime = validateBoolOption( + 'absoluteRuntime', + opts.absoluteRuntime, + true + ); + + var absoluteRuntimePath = undefined; + if (useAbsoluteRuntime) { + absoluteRuntimePath = path.dirname( require.resolve('@babel/runtime/package.json') ); } @@ -108,7 +114,7 @@ module.exports = function(api, opts) { // Undocumented option that lets us encapsulate our runtime, ensuring // the correct version is used // https://github.com/babel/babel/blob/090c364a90fe73d36a30707fc612ce037bdbbb24/packages/babel-plugin-transform-runtime/src/index.js#L35-L42 - absoluteRuntime, + absoluteRuntime: absoluteRuntimePath, }, ], // Adds syntax support for import() diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 1c44211e181..ab54cc33cf2 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -226,12 +226,7 @@ module.exports = { // @remove-on-eject-begin babelrc: false, configFile: false, - presets: [ - [ - require.resolve('babel-preset-react-app'), - { absoluteRuntime: true }, - ], - ], + presets: [require.resolve('babel-preset-react-app')], // Make sure we have a unique cache identifier, erring on the // side of caution. // We remove this when the user ejects because the default @@ -290,7 +285,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { helpers: true, absoluteRuntime: true }, + { helpers: true }, ], ], cacheDirectory: true, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 3df706e2966..fe92a483883 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -277,12 +277,7 @@ module.exports = { // @remove-on-eject-begin babelrc: false, configFile: false, - presets: [ - [ - require.resolve('babel-preset-react-app'), - { absoluteRuntime: true }, - ], - ], + presets: [require.resolve('babel-preset-react-app')], // Make sure we have a unique cache identifier, erring on the // side of caution. // We remove this when the user ejects because the default @@ -334,7 +329,7 @@ module.exports = { presets: [ [ require.resolve('babel-preset-react-app/dependencies'), - { helpers: true, absoluteRuntime: true }, + { helpers: true }, ], ], cacheDirectory: true, From 454b495af55b0ee642d736a3ad0276c0208ba290 Mon Sep 17 00:00:00 2001 From: Joe Haddad Date: Thu, 27 Sep 2018 15:12:50 -0400 Subject: [PATCH 8/8] Remove runtime package from error overlay --- packages/react-error-overlay/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index 88c2c9d06b2..c08a2cfb41f 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -32,7 +32,6 @@ "devDependencies": { "@babel/code-frame": "7.0.0", "@babel/core": "7.1.0", - "@babel/runtime": "7.0.0", "anser": "1.4.7", "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0",