-
Notifications
You must be signed in to change notification settings - Fork 16
/
makeBabelConfig.js
74 lines (66 loc) · 2.18 KB
/
makeBabelConfig.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const browserTargets = require('./.browserlistrc')
const jestTargets = { node: 'current' }
const getBabelModuleType = (moduleType) => {
switch (moduleType) {
case 'cjs':
case 'commonjs':
return 'commonjs'
case 'systemjs':
case 'umd':
case 'amd':
return moduleType
case 'es':
default:
return false
}
}
const makeBabelConfig = ({ moduleType, mode }) => {
const isTest = mode === 'test'
return {
presets: [
require('@babel/preset-react'),
require('@babel/preset-typescript'),
[
require('@babel/preset-env'),
{
modules: isTest
? 'commonjs'
: getBabelModuleType(moduleType),
targets: isTest ? jestTargets : browserTargets,
},
],
],
plugins: [
// Adds syntax support for import()
require('@babel/plugin-syntax-dynamic-import').default,
/*
* These plugins actually transform code
*/
// Automatically include a React import when JSX is present
require('babel-plugin-react-require'),
// Adds support for arrow-function class properties
// class { handleClick = () => { } }
require('@babel/plugin-proposal-class-properties'),
// Adds syntax support for optional chaining (?.)
require('@babel/plugin-proposal-optional-chaining'),
// Adds support for default value using ?? operator
require('@babel/plugin-proposal-nullish-coalescing-operator'),
],
env: {
production: {
plugins: [
[require('styled-jsx/babel'), { optimizeForSpeed: true }],
],
},
development: {
plugins: [
[require('styled-jsx/babel'), { optimizeForSpeed: true }],
],
},
test: {
plugins: [require('styled-jsx/babel-test')],
},
},
}
}
module.exports = makeBabelConfig