-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbabel.config.js
135 lines (124 loc) · 3.5 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
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
module.exports = function (api) {
// 若build依赖于env,就不要再指定api.cache为forever或never了
// api.cache(true);
// api.env() returns the current NODE_ENV string.
const env = api.env();
const isProd = env?.toLowerCase() === 'production';
function checkAppEnv(env) {
return (
process.env.APP_ENV &&
process.env.APP_ENV.toLowerCase().indexOf(env) !== -1
);
}
// 用在react应用开发调试阶段,会启用 react-refresh/babel
const isEnvReactHotReload = checkAppEnv('reacthot');
// 用在react项目打包阶段,不会启用react-refresh/babel
const isEnvReact = checkAppEnv('react');
const isEnvReactLike = checkAppEnv('reactlike');
console.log(
';; env.APP_ENV, isEnvReact ',
process.env.APP_ENV,
isEnvReact,
env,
);
let babelPresetReactConfig = {};
/** 根据具体的react-like环境单独配置 */
if (isEnvReactLike) {
babelPresetReactConfig = {
runtime: 'classic',
pragma: 'Didact.createElement',
// pragmaFrag: 'Reacting.Fragment',
throwIfNamespace: false,
};
}
// Plugins run before Presets. Plugin ordering is first to last.
const plugins = [
['@babel/plugin-proposal-decorators', { legacy: true }],
['@babel/plugin-proposal-class-properties', { loose: false }],
'@babel/plugin-transform-private-methods',
// ['@babel/plugin-syntax-import-assertions'],
isEnvReactHotReload && 'react-refresh/babel',
].filter(Boolean);
function configModule() {
if (env === 'esm' || env === 'es6') {
return false;
}
// auto defaults to node commonjs
return 'auto';
}
// Preset ordering is reversed (last to first).
const presets = [
[
'@babel/preset-env',
{
modules: false,
// modules: configModule(),
// targets: 'defaults', // '> 0.5%, last 2 versions, not dead',
targets: 'last 2 Chrome versions',
useBuiltIns: 'usage',
corejs: { version: '3.30', proposals: true },
shippedProposals: true,
debug: false,
},
],
[
'@babel/preset-typescript',
{
// later: support other jsx
isTSX: Boolean(isEnvReact),
allExtensions: true,
// onlyRemoveTypeImports: true,
allowNamespaces: true,
allowDeclareFields: true,
},
],
isEnvReact && [
'@babel/preset-react',
{
development: !isProd,
...babelPresetReactConfig,
},
],
[
'@linaria',
{
evaluate: true,
displayName: !isProd,
babelOptions: {
// rootMode: 'upward',
configFile: false,
presets: [
[
'@babel/preset-env',
{
modules: false,
useBuiltIns: 'usage',
corejs: { version: '3.30', proposals: true },
shippedProposals: true,
debug: false,
},
],
[
'@babel/preset-typescript',
{
isTSX: Boolean(isEnvReact),
allExtensions: true,
// onlyRemoveTypeImports: true,
allowNamespaces: true,
allowDeclareFields: true,
},
],
isEnvReact && '@babel/preset-react',
].filter(Boolean),
},
},
],
].filter(Boolean);
// console.log('babel-presets, ', JSON.stringify(presets));
const ignore = ['node_modules'];
return {
plugins,
presets,
ignore,
};
};