Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to Babel 7 #3522

Merged
merged 37 commits into from
Jan 11, 2018
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
7a07a1a
Update dependencies in react-scripts
Nov 28, 2017
7cbeb83
Add first pass of working dependencies for babel-preset-react-app and…
Nov 29, 2017
b0ba884
Bump more dependency versions
Nov 30, 2017
5cb193c
Adjust more versions and edit fix options
Nov 30, 2017
ae2b569
Restore functionality of old preset
Nov 30, 2017
222a905
Disable Uglify in iframe webpack
Nov 30, 2017
f9391f7
Apply prettier
Nov 30, 2017
fbaacf4
Re-enable cache in dev and clean deps
Nov 30, 2017
0cdf4f9
Lock packages and move babel/core to dep in preset
Nov 30, 2017
dc15217
Bump babel-jest
Nov 30, 2017
60a42ae
Re-enable uglify
Timer Dec 1, 2017
911debc
Nest forceAllTransforms correctly in webpack config
Dec 1, 2017
8003d54
Install babel-core bridge for jest
Dec 2, 2017
c180b49
Add jest-cli and babel-core bridge to make tests in react-error-overl…
Dec 2, 2017
eff7257
Re-enable transform-dynamic-import
Timer Dec 3, 2017
ca7516d
Add dynamic import syntax support back
Timer Dec 3, 2017
482abf2
Use new babel in kitchensink
Timer Dec 3, 2017
539e46a
Transform modules in test
Timer Dec 3, 2017
60a5f57
Revert "Transform modules in test"
Timer Dec 3, 2017
67ca211
Attempt fix for ejected tests
Timer Dec 3, 2017
60ab887
try this
Timer Dec 3, 2017
95dbd6f
Add regenerator back
Dec 4, 2017
dea535e
Bump babel deps to beta.34
Dec 4, 2017
1466478
Remove bad files
Timer Dec 5, 2017
ab26521
Use default when requiring babel transform plugin
Dec 6, 2017
fb6480d
Bump deps
Timer Jan 3, 2018
f95e5a9
Try the fix?
gaearon Jan 10, 2018
7f29d27
Oopsie
gaearon Jan 10, 2018
44d93ab
Merge branch 'next' into 2.0-beta
gaearon Jan 11, 2018
b81c25f
Remove some weird things
gaearon Jan 11, 2018
174ddf5
Run Babel on react-error-overlay tests
gaearon Jan 11, 2018
9f504c2
Try fixing kitchensink
gaearon Jan 11, 2018
4ade5c3
Use new API for codeFrame
gaearon Jan 11, 2018
9537092
Add missing (?) babelrc
gaearon Jan 11, 2018
a29c74d
Maybe this helps?
gaearon Jan 11, 2018
effe64a
Maybe fix mocha
gaearon Jan 11, 2018
0d5043d
I shouldn't have deleted this :facepalm:
gaearon Jan 11, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
179 changes: 79 additions & 100 deletions packages/babel-preset-react-app/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,131 +6,110 @@
*/
'use strict';

const plugins = [
// class { handleClick = () => { } }
require.resolve('babel-plugin-transform-class-properties'),
// The following two plugins use Object.assign directly, instead of Babel's
// extends helper. Note that this assumes `Object.assign` is available.
// { ...todo, completed: true }
[
require.resolve('babel-plugin-transform-object-rest-spread'),
{
useBuiltIns: true,
},
],
// Transforms JSX
[
require.resolve('babel-plugin-transform-react-jsx'),
{
useBuiltIns: true,
},
],
// Polyfills the runtime needed for async/await and generators
[
require.resolve('babel-plugin-transform-runtime'),
{
helpers: false,
polyfill: false,
regenerator: true,
},
],
];

// This is similar to how `env` works in Babel:
// https://babeljs.io/docs/usage/babelrc/#env-option
// We are not using `env` because it’s ignored in versions > babel-core@6.10.4:
// https://github.com/babel/babel/issues/4539
// https://github.com/facebookincubator/create-react-app/issues/720
// It’s also nice that we can enforce `NODE_ENV` being specified.
var env = process.env.BABEL_ENV || process.env.NODE_ENV;
if (env !== 'development' && env !== 'test' && env !== 'production') {
throw new Error(
'Using `babel-preset-react-app` requires that you specify `NODE_ENV` or ' +
'`BABEL_ENV` environment variables. Valid values are "development", ' +
'"test", and "production". Instead, received: ' +
JSON.stringify(env) +
'.'
);
}
module.exports = function(api, opts) {
if (!opts) {
opts = {};
}

if (env === 'development' || env === 'test') {
// The following two plugins are currently necessary to make React warnings
// include more valuable information. They are included here because they are
// currently not enabled in babel-preset-react. See the below threads for more info:
// https://github.com/babel/babel/issues/4702
// https://github.com/babel/babel/pull/3540#issuecomment-228673661
// https://github.com/facebookincubator/create-react-app/issues/989
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'),
]);
}
// This is similar to how `env` works in Babel:
// https://babeljs.io/docs/usage/babelrc/#env-option
// We are not using `env` because it’s ignored in versions > babel-core@6.10.4:
// https://github.com/babel/babel/issues/4539
// https://github.com/facebookincubator/create-react-app/issues/720
// It’s also nice that we can enforce `NODE_ENV` being specified.
var env = process.env.BABEL_ENV || process.env.NODE_ENV;
var isEnvDevelopment = env === 'development';
var isEnvProduction = env === 'production';
var isEnvTest = env === 'test';
if (!isEnvDevelopment && !isEnvProduction && !isEnvTest) {
throw new Error(
'Using `babel-preset-react-app` requires that you specify `NODE_ENV` or ' +
'`BABEL_ENV` environment variables. Valid values are "development", ' +
'"test", and "production". Instead, received: ' +
JSON.stringify(env) +
'.'
);
}

if (env === 'test') {
module.exports = {
return {
presets: [
// ES features necessary for user's Node version
[
require('babel-preset-env').default,
isEnvTest && [
// ES features necessary for user's Node version
require('@babel/preset-env').default,
{
targets: {
node: 'current',
},
},
],
// JSX, Flow
require.resolve('babel-preset-react'),
],
plugins: plugins.concat([
// Compiles import() to a deferred require()
require.resolve('babel-plugin-dynamic-import-node'),
]),
};
} else {
module.exports = {
presets: [
// Latest stable ECMAScript features
[
require.resolve('babel-preset-env'),
(isEnvProduction || isEnvDevelopment) && [
// Latest stable ECMAScript features
require('@babel/preset-env').default,
{
targets: {
// React parses on ie 9, so we should too
ie: 9,
// We currently minify with uglify
// Remove after https://github.com/mishoo/UglifyJS2/issues/448
uglify: true,
},
// We currently minify with uglify
// Remove after https://github.com/mishoo/UglifyJS2/issues/448
forceAllTransforms: true,
// Disable polyfill transforms
useBuiltIns: false,
// Do not transform modules to CJS
modules: false,
},
],
// JSX, Flow
require.resolve('babel-preset-react'),
],
plugins: plugins.concat([
// function* () { yield 42; yield 43; }
[
require.resolve('babel-plugin-transform-regenerator'),
require('@babel/preset-react').default,
{
// Adds component stack to warning messages
// Adds __self attribute to JSX which React will use for some warnings
development: isEnvDevelopment || isEnvTest,
},
],
[require('@babel/preset-flow').default],
].filter(Boolean),
plugins: [
// class { handleClick = () => { } }
require('@babel/plugin-proposal-class-properties').default,
// The following two plugins use Object.assign directly, instead of Babel's
// extends helper. Note that this assumes `Object.assign` is available.
// { ...todo, completed: true }
[
require('@babel/plugin-proposal-object-rest-spread').default,
{
useBuiltIns: true,
},
],
// Transforms JSX
[
require('@babel/plugin-transform-react-jsx').default,
{
useBuiltIns: true,
},
],
// Polyfills the runtime needed for async/await and generators
[
require('@babel/plugin-transform-runtime').default,
{
helpers: false,
polyfill: false,
regenerator: true,
},
],
// function* () { yield 42; yield 43; }
!isEnvTest && [
require('@babel/plugin-transform-regenerator').default,
{
// Async functions are converted to generators by babel-preset-env
async: false,
},
],
// Adds syntax support for import()
require.resolve('babel-plugin-syntax-dynamic-import'),
]),
require('@babel/plugin-syntax-dynamic-import').default,
isEnvTest &&
// Transform dynamic import to require
require('babel-plugin-transform-dynamic-import').default,
].filter(Boolean),
};

if (env === 'production') {
// Optimization: hoist JSX that never changes out of render()
// Disabled because of issues: https://github.com/facebookincubator/create-react-app/issues/553
// TODO: Enable again when these issues are resolved.
// plugins.push.apply(plugins, [
// require.resolve('babel-plugin-transform-react-constant-elements')
// ]);
}
}
};
28 changes: 13 additions & 15 deletions packages/babel-preset-react-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,18 @@
"index.js"
],
"dependencies": {
"babel-plugin-dynamic-import-node": "1.1.0",
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0",
"babel-plugin-transform-react-constant-elements": "6.23.0",
"babel-plugin-transform-react-jsx": "6.24.1",
"babel-plugin-transform-react-jsx-self": "6.22.0",
"babel-plugin-transform-react-jsx-source": "6.22.0",
"babel-plugin-transform-regenerator": "6.26.0",
"babel-plugin-transform-runtime": "6.23.0",
"babel-preset-env": "1.6.1",
"babel-preset-react": "6.24.1"
},
"peerDependencies": {
"babel-runtime": "^6.23.0"
"@babel/core": "7.0.0-beta.36",
"@babel/plugin-proposal-class-properties": "7.0.0-beta.36",
"@babel/plugin-syntax-dynamic-import": "^7.0.0-beta.36",
"@babel/plugin-transform-classes": "7.0.0-beta.36",
"@babel/plugin-transform-react-constant-elements": "7.0.0-beta.36",
"@babel/plugin-transform-react-display-name": "7.0.0-beta.36",
"@babel/plugin-transform-react-jsx": "7.0.0-beta.36",
"@babel/plugin-transform-regenerator": "7.0.0-beta.36",
"@babel/plugin-transform-runtime": "7.0.0-beta.36",
"@babel/preset-env": "7.0.0-beta.36",
"@babel/preset-flow": "7.0.0-beta.36",
"@babel/preset-react": "7.0.0-beta.36",
"babel-plugin-transform-dynamic-import": "2.0.0"
}
}
2 changes: 1 addition & 1 deletion packages/eslint-config-react-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"index.js"
],
"peerDependencies": {
"babel-eslint": "^7.2.3",
"babel-eslint": "^8.0.2",
"eslint": "^4.1.1",
"eslint-plugin-flowtype": "^2.34.1",
"eslint-plugin-import": "^2.6.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/react-dev-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
],
"dependencies": {
"address": "1.0.3",
"babel-code-frame": "6.26.0",
"@babel/code-frame": "7.0.0-beta.36",
"chalk": "1.1.3",
"cross-spawn": "5.1.0",
"detect-port-alt": "1.1.3",
Expand All @@ -56,7 +56,7 @@
"text-table": "0.2.0"
},
"devDependencies": {
"jest": "20.0.4"
"jest": "21.2.1"
},
"scripts": {
"test": "jest"
Expand Down
16 changes: 10 additions & 6 deletions packages/react-error-overlay/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,13 @@
"lib/index.js"
],
"devDependencies": {
"@babel/code-frame": "7.0.0-beta.36",
"@babel/core": "7.0.0-beta.36",
"@babel/runtime": "7.0.0-beta.36",
"anser": "1.4.4",
"babel-code-frame": "6.26.0",
"babel-core": "^6.26.0",
"babel-eslint": "7.2.3",
"babel-loader": "^7.1.2",
"babel-eslint": "^8.0.2",
"babel-loader": "^8.0.0-beta.0",
"babel-preset-react-app": "^3.1.0",
"babel-runtime": "6.26.0",
"chalk": "^2.1.0",
"chokidar": "^1.7.0",
"cross-env": "5.0.5",
Expand All @@ -48,7 +48,7 @@
"eslint-plugin-react": "7.1.0",
"flow-bin": "^0.54.0",
"html-entities": "1.2.1",
"jest": "20.0.4",
"jest": "21.2.1",
"jest-fetch-mock": "1.2.1",
"object-assign": "4.1.1",
"promise": "8.0.1",
Expand Down Expand Up @@ -77,5 +77,9 @@
"/fixtures/",
"setupJest.js"
]
},
"dependencies": {
"babel-core": "^7.0.0-bridge.0",
"jest-cli": "^21.2.1"
}
}
13 changes: 10 additions & 3 deletions packages/react-error-overlay/src/containers/StackFrameCodeBlock.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import type { ScriptLine } from '../utils/stack-frame';
import { primaryErrorStyle, secondaryErrorStyle } from '../styles';
import generateAnsiHTML from '../utils/generateAnsiHTML';

import codeFrame from 'babel-code-frame';
import codeFrame from '@babel/code-frame';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might want to use import { codeFrameColumns } from '@babel/code-frame';, see https://www.npmjs.com/package/@babel/code-frame#upgrading-from-prior-versions


type StackFrameCodeBlockPropsType = {|
lines: ScriptLine[],
Expand Down Expand Up @@ -55,8 +55,15 @@ function StackFrameCodeBlock(props: Exact<StackFrameCodeBlockPropsType>) {
});
const ansiHighlight = codeFrame(
sourceCode.join('\n'),
lineNum,
columnNum == null ? 0 : columnNum - (isFinite(whiteSpace) ? whiteSpace : 0),
{
start: {
line: lineNum,
column:
columnNum == null
? 0
: columnNum - (isFinite(whiteSpace) ? whiteSpace : 0),
},
},
{
forceColor: true,
linesAbove: contextSize,
Expand Down
19 changes: 18 additions & 1 deletion packages/react-error-overlay/webpack.config.iframe.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,24 @@ module.exports = {
rules: [
{
test: /\.js$/,
include: path.resolve(__dirname, './src'),
include: [
path.resolve(__dirname, './src'),
path.dirname(
require.resolve('chalk', {
paths: path.dirname(require.resolve('@babel/code-frame')),
})
),
path.dirname(
require.resolve(
'ansi-styles',
path.dirname(
require.resolve('chalk', {
paths: path.dirname(require.resolve('@babel/code-frame')),
})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of this looks very fragile, why did we add it?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, okay. #3522 (comment)

sigh

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It should be pretty reliable -- it resolves chalk from the context of @babel/code-frame (so we find the correct module which needs compiling).

Same for ansi-styles and chalk.

Alternatively, we can just always compile those modules.

)
)
),
],
use: 'babel-loader',
},
],
Expand Down
6 changes: 3 additions & 3 deletions packages/react-scripts/config/webpack.config.dev.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ module.exports = {
// 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')
// 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
Expand Down
6 changes: 3 additions & 3 deletions packages/react-scripts/config/webpack.config.prod.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,9 @@ module.exports = {
// 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')
// 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
Expand Down
4 changes: 0 additions & 4 deletions packages/react-scripts/fixtures/kitchensink/.babelrc

This file was deleted.

Loading