diff --git a/packages/babel-preset-react-app/loader.js b/packages/babel-preset-react-app/loader.js deleted file mode 100644 index da11ea80..00000000 --- a/packages/babel-preset-react-app/loader.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -'use strict'; - -const loader = require('babel-loader'); -const overrides = require('./overrides'); - -module.exports = loader.custom(() => overrides); diff --git a/packages/babel-preset-react-app/overrides.js b/packages/babel-preset-react-app/overrides.js deleted file mode 100644 index 1613983b..00000000 --- a/packages/babel-preset-react-app/overrides.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (c) 2015-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -'use strict'; - -const crypto = require('crypto'); - -module.exports = { - // This function transforms the Babel configuration on a per-file basis - config(config, { source }) { - // Babel Macros are notoriously hard to cache, so they shouldn't be - // https://github.com/babel/babel/issues/8497 - // We naively detect macros using their package suffix and insert a random - // caller name, a valid option accepted by Babel, to compose a one-time - // cacheIdentifier for the file. We cannot tune the loader options on a per - // file basis. - if (source.indexOf('.macro') !== -1 || source.indexOf('/macro') !== -1) { - return { - ...config.options, - caller: { - name: `babel-preset-react-app:${crypto - .randomBytes(32) - .toString('hex')}`, - }, - }; - } - return config.options; - }, -}; diff --git a/packages/babel-preset-react-app/package.json b/packages/babel-preset-react-app/package.json index 4bb3240a..14630152 100644 --- a/packages/babel-preset-react-app/package.json +++ b/packages/babel-preset-react-app/package.json @@ -12,8 +12,7 @@ "dependencies.js", "dev.js", "index.js", - "loader.js", - "overrides.js", + "webpack-overrides.js", "prod.js", "test.js" ], @@ -31,7 +30,7 @@ "@babel/preset-flow": "7.0.0", "@babel/preset-react": "7.0.0", "@babel/runtime": "7.0.0", - "babel-loader": "8.0.2", + "babel-loader": "8.0.4", "babel-plugin-macros": "2.4.2", "babel-plugin-transform-dynamic-import": "2.1.0", "babel-plugin-transform-react-remove-prop-types": "0.4.18" diff --git a/packages/babel-preset-react-app/webpack-overrides.js b/packages/babel-preset-react-app/webpack-overrides.js new file mode 100644 index 00000000..95a87eeb --- /dev/null +++ b/packages/babel-preset-react-app/webpack-overrides.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +'use strict'; + +const crypto = require('crypto'); + +const macroCheck = new RegExp('[./]macro'); + +module.exports = function() { + return { + // This function transforms the Babel configuration on a per-file basis + config(config, { source }) { + // Babel Macros are notoriously hard to cache, so they shouldn't be + // https://github.com/babel/babel/issues/8497 + // We naively detect macros using their package suffix and add a random token + // to the caller, a valid option accepted by Babel, to compose a one-time + // cacheIdentifier for the file. We cannot tune the loader options on a per + // file basis. + if (macroCheck.test(source)) { + return Object.assign({}, config.options, { + caller: Object.assign({}, config.options.caller, { + craInvalidationToken: crypto.randomBytes(32).toString('hex'), + }), + }); + } + return config.options; + }, + }; +}; diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index c08a2cfb..2f86355e 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -36,7 +36,7 @@ "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", "babel-jest": "23.6.0", - "babel-loader": "8.0.2", + "babel-loader": "8.0.4", "babel-preset-react-app": "^4.0.0", "chalk": "^2.3.2", "chokidar": "^2.0.2", diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index ab54cc33..b01fb6a5 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -218,11 +218,11 @@ module.exports = { }, }, { - // We need to use our own loader until `babel-loader` supports - // customization - // https://github.com/babel/babel-loader/pull/687 - loader: require.resolve('babel-preset-react-app/loader'), + loader: require.resolve('babel-loader'), options: { + customize: require.resolve( + 'babel-preset-react-app/webpack-overrides' + ), // @remove-on-eject-begin babelrc: false, configFile: false, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index fe92a483..e728798c 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -272,8 +272,11 @@ module.exports = { // We need to use our own loader until `babel-loader` supports // customization // https://github.com/babel/babel-loader/pull/687 - loader: require.resolve('babel-preset-react-app/loader'), + loader: require.resolve('babel-loader'), options: { + customize: require.resolve( + 'babel-preset-react-app/webpack-overrides' + ), // @remove-on-eject-begin babelrc: false, configFile: false, diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index d0587169..f5a82071 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -26,7 +26,7 @@ "babel-core": "7.0.0-bridge.0", "babel-eslint": "9.0.0", "babel-jest": "23.6.0", - "babel-loader": "8.0.2", + "babel-loader": "8.0.4", "babel-plugin-named-asset-import": "^0.2.0", "babel-preset-react-app": "^4.0.0", "bfj": "6.1.1",