From 9480e9b4fd9a2522aedfbf8ef8743ae4cfaf2ee9 Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Sun, 9 Oct 2016 17:22:28 +0530 Subject: [PATCH 1/4] Disable ES2015 transforms based on node version using babel-preset-env --- packages/babel-preset-react-app/index.js | 76 ++++++++++++-------- packages/babel-preset-react-app/package.json | 1 + 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/packages/babel-preset-react-app/index.js b/packages/babel-preset-react-app/index.js index 34e9efabb72..9758cffee62 100644 --- a/packages/babel-preset-react-app/index.js +++ b/packages/babel-preset-react-app/index.js @@ -10,14 +10,7 @@ var path = require('path'); -module.exports = { - presets: [ - // Latest stable ECMAScript features - require.resolve('babel-preset-latest'), - // JSX, Flow - require.resolve('babel-preset-react') - ], - plugins: [ +const plugins = [ // class { handleClick = () => { } } require.resolve('babel-plugin-transform-class-properties'), // { ...todo, completed: true } @@ -35,8 +28,7 @@ module.exports = { // Resolve the Babel runtime relative to the config. moduleName: path.dirname(require.resolve('babel-runtime/package')) }] - ] -}; + ]; // This is similar to how `env` works in Babel: // https://babeljs.io/docs/usage/babelrc/#env-option @@ -52,23 +44,51 @@ if (env !== 'development' && env !== 'test' && env !== 'production') { '"test", and "production". Instead, received: ' + JSON.stringify(env) + '.' ); } -var plugins = module.exports.plugins; -if (env === 'development' || env === 'test') { - plugins.push.apply(plugins, [ - // Adds component stack to warning messages - require.resolve('babel-plugin-transform-react-jsx-source'), - // Adds __self attribute to JSX which React will use for some warnings - require.resolve('babel-plugin-transform-react-jsx-self') - ]); + +if (env === 'test') { + module.exports = { + presets: [ + [require('babel-preset-env').default, { + "targets": { + "node": process.version + }, + }], + // JSX, Flow + require.resolve('babel-preset-react') + ], + plugins: plugins + }; } -if (env === 'production') { - // Optimization: hoist JSX that never changes out of render() - // Disabled because of issues: - // * https://github.com/facebookincubator/create-react-app/issues/525 - // * https://phabricator.babeljs.io/search/query/pCNlnC2xzwzx/ - // * https://github.com/babel/babel/issues/4516 - // TODO: Enable again when these issues are resolved. - // plugins.push.apply(plugins, [ - // require.resolve('babel-plugin-transform-react-constant-elements') - // ]); +else { + module.exports = { + presets: [ + // Latest stable ECMAScript features + require.resolve('babel-preset-latest'), + // JSX, Flow + require.resolve('babel-preset-react') + ], + plugins: plugins + }; + + if (env === 'development' || env === 'test') { + plugins.push.apply(plugins, [ + // Adds component stack to warning messages + require.resolve('babel-plugin-transform-react-jsx-source'), + // Adds __self attribute to JSX which React will use for some warnings + require.resolve('babel-plugin-transform-react-jsx-self') + ]); + } + + if (env === 'production') { + // Optimization: hoist JSX that never changes out of render() + // Disabled because of issues: + // * https://github.com/facebookincubator/create-react-app/issues/525 + // * https://phabricator.babeljs.io/search/query/pCNlnC2xzwzx/ + // * https://github.com/babel/babel/issues/4516 + // TODO: Enable again when these issues are resolved. + // plugins.push.apply(plugins, [ + // require.resolve('babel-plugin-transform-react-constant-elements') + // ]); + } } + diff --git a/packages/babel-preset-react-app/package.json b/packages/babel-preset-react-app/package.json index f0ead1f3b50..f7fb0cd3d61 100644 --- a/packages/babel-preset-react-app/package.json +++ b/packages/babel-preset-react-app/package.json @@ -18,6 +18,7 @@ "babel-plugin-transform-react-jsx-source": "6.9.0", "babel-plugin-transform-regenerator": "6.14.0", "babel-plugin-transform-runtime": "6.15.0", + "babel-preset-env": "0.0.4", "babel-preset-latest": "6.14.0", "babel-preset-react": "6.11.1", "babel-runtime": "6.11.6" From 5ee2eb4f7b69d7292881e966da1bab5de653decb Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Mon, 10 Oct 2016 01:40:50 +0530 Subject: [PATCH 2/4] pass major version number for node to babel-preset-env instead of version string --- packages/babel-preset-react-app/index.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/babel-preset-react-app/index.js b/packages/babel-preset-react-app/index.js index 9758cffee62..82cecd08448 100644 --- a/packages/babel-preset-react-app/index.js +++ b/packages/babel-preset-react-app/index.js @@ -45,12 +45,21 @@ if (env !== 'development' && env !== 'test' && env !== 'production') { ); } +if (env === 'development' || env === 'test') { + plugins.push.apply(plugins, [ + // Adds component stack to warning messages + require.resolve('babel-plugin-transform-react-jsx-source'), + // Adds __self attribute to JSX which React will use for some warnings + require.resolve('babel-plugin-transform-react-jsx-self') + ]); +} + if (env === 'test') { module.exports = { presets: [ [require('babel-preset-env').default, { "targets": { - "node": process.version + "node": parseInt(process.versions.node), }, }], // JSX, Flow @@ -70,15 +79,6 @@ else { plugins: plugins }; - if (env === 'development' || env === 'test') { - plugins.push.apply(plugins, [ - // Adds component stack to warning messages - require.resolve('babel-plugin-transform-react-jsx-source'), - // Adds __self attribute to JSX which React will use for some warnings - require.resolve('babel-plugin-transform-react-jsx-self') - ]); - } - if (env === 'production') { // Optimization: hoist JSX that never changes out of render() // Disabled because of issues: From abe898c138a96962afea5a1e0dab087869c943c9 Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Mon, 10 Oct 2016 23:50:27 +0530 Subject: [PATCH 3/4] use parseFloat() instead of parseInt() to parse node version --- packages/babel-preset-react-app/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-preset-react-app/index.js b/packages/babel-preset-react-app/index.js index 82cecd08448..d5fbb6ed9d6 100644 --- a/packages/babel-preset-react-app/index.js +++ b/packages/babel-preset-react-app/index.js @@ -59,7 +59,7 @@ if (env === 'test') { presets: [ [require('babel-preset-env').default, { "targets": { - "node": parseInt(process.versions.node), + "node": parseFloat(process.versions.node), }, }], // JSX, Flow From 935c88f50679e6ec42b6e1a75ef7b0e9262caa5b Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Tue, 11 Oct 2016 00:11:02 +0530 Subject: [PATCH 4/4] fixed style nits --- packages/babel-preset-react-app/index.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/babel-preset-react-app/index.js b/packages/babel-preset-react-app/index.js index d5fbb6ed9d6..d3063aee304 100644 --- a/packages/babel-preset-react-app/index.js +++ b/packages/babel-preset-react-app/index.js @@ -57,9 +57,10 @@ if (env === 'development' || env === 'test') { if (env === 'test') { module.exports = { presets: [ + // ES features necessary for user's Node version [require('babel-preset-env').default, { - "targets": { - "node": parseFloat(process.versions.node), + targets: { + node: parseFloat(process.versions.node), }, }], // JSX, Flow @@ -67,8 +68,7 @@ if (env === 'test') { ], plugins: plugins }; -} -else { +} else { module.exports = { presets: [ // Latest stable ECMAScript features