10
10
11
11
var path = require ( 'path' ) ;
12
12
13
- module . exports = {
14
- presets : [
15
- // Latest stable ECMAScript features
16
- require . resolve ( 'babel-preset-latest' ) ,
17
- // JSX, Flow
18
- require . resolve ( 'babel-preset-react' )
19
- ] ,
20
- plugins : [
13
+ const plugins = [
21
14
// class { handleClick = () => { } }
22
15
require . resolve ( 'babel-plugin-transform-class-properties' ) ,
23
16
// { ...todo, completed: true }
@@ -35,8 +28,7 @@ module.exports = {
35
28
// Resolve the Babel runtime relative to the config.
36
29
moduleName : path . dirname ( require . resolve ( 'babel-runtime/package' ) )
37
30
} ]
38
- ]
39
- } ;
31
+ ] ;
40
32
41
33
// This is similar to how `env` works in Babel:
42
34
// https://babeljs.io/docs/usage/babelrc/#env-option
@@ -52,7 +44,7 @@ if (env !== 'development' && env !== 'test' && env !== 'production') {
52
44
'"test", and "production". Instead, received: ' + JSON . stringify ( env ) + '.'
53
45
) ;
54
46
}
55
- var plugins = module . exports . plugins ;
47
+
56
48
if ( env === 'development' || env === 'test' ) {
57
49
plugins . push . apply ( plugins , [
58
50
// Adds component stack to warning messages
@@ -61,14 +53,42 @@ if (env === 'development' || env === 'test') {
61
53
require . resolve ( 'babel-plugin-transform-react-jsx-self' )
62
54
] ) ;
63
55
}
64
- if ( env === 'production' ) {
65
- // Optimization: hoist JSX that never changes out of render()
66
- // Disabled because of issues:
67
- // * https://github.com/facebookincubator/create-react-app/issues/525
68
- // * https://phabricator.babeljs.io/search/query/pCNlnC2xzwzx/
69
- // * https://github.com/babel/babel/issues/4516
70
- // TODO: Enable again when these issues are resolved.
71
- // plugins.push.apply(plugins, [
72
- // require.resolve('babel-plugin-transform-react-constant-elements')
73
- // ]);
56
+
57
+ if ( env === 'test' ) {
58
+ module . exports = {
59
+ presets : [
60
+ // ES features necessary for user's Node version
61
+ [ require ( 'babel-preset-env' ) . default , {
62
+ targets : {
63
+ node : parseFloat ( process . versions . node ) ,
64
+ } ,
65
+ } ] ,
66
+ // JSX, Flow
67
+ require . resolve ( 'babel-preset-react' )
68
+ ] ,
69
+ plugins : plugins
70
+ } ;
71
+ } else {
72
+ module . exports = {
73
+ presets : [
74
+ // Latest stable ECMAScript features
75
+ require . resolve ( 'babel-preset-latest' ) ,
76
+ // JSX, Flow
77
+ require . resolve ( 'babel-preset-react' )
78
+ ] ,
79
+ plugins : plugins
80
+ } ;
81
+
82
+ if ( env === 'production' ) {
83
+ // Optimization: hoist JSX that never changes out of render()
84
+ // Disabled because of issues:
85
+ // * https://github.com/facebookincubator/create-react-app/issues/525
86
+ // * https://phabricator.babeljs.io/search/query/pCNlnC2xzwzx/
87
+ // * https://github.com/babel/babel/issues/4516
88
+ // TODO: Enable again when these issues are resolved.
89
+ // plugins.push.apply(plugins, [
90
+ // require.resolve('babel-plugin-transform-react-constant-elements')
91
+ // ]);
92
+ }
74
93
}
94
+
0 commit comments