-
Notifications
You must be signed in to change notification settings - Fork 0
/
babel.config.js
47 lines (42 loc) · 1.65 KB
/
babel.config.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
const reactPreset = require('@babel/preset-react').default;
const typescriptPreset = require('@babel/preset-typescript').default;
const envPreset = require('@babel/preset-env').default;
const classPropertiesPlugin = require('@babel/plugin-proposal-class-properties')
.default;
const objectSpreadTransformation = require('@babel/plugin-proposal-object-rest-spread')
.default;
const runtimeTransformPlugin = require('@babel/plugin-transform-runtime')
.default;
// TODO die Nutzung der API ist von babel noch nicht weiter dokumentiert, es scheint so erstmal zu funktionieren, aber das ist noch nicht ausschließlich schön
module.exports = api => {
// das wäre eigentlich sauberer, aber api.env() scheint intern bereits cache aufzurufen weswegen man es nicht mehrmals tunen kann
// api.cache(() => process.env.NODE_ENV + api.env());
// es funktioniert auch so da UMD und ES-Module aktuell die gleiche config haben
const env = api.env();
const isTest = process.env.NODE_ENV === 'test';
const isProd = process.env.NODE_ENV === 'production';
const isCommonjs = env === 'commonjs';
return {
presets: [
[
envPreset,
{
modules: isTest ? 'commonjs' : false,
targets: {
browsers: ['>0.25%']
}
}
],
[reactPreset, { useBuiltIns: true, development: !isProd }],
typescriptPreset
].filter(Boolean),
plugins: [
[classPropertiesPlugin, { loose: true }],
[objectSpreadTransformation, { useBuiltIns: true }],
isProd && [
runtimeTransformPlugin,
{ useESModules: !isCommonjs, regenerator: false, corejs: false }
]
].filter(Boolean)
};
};