1 | 'use strict'
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | const {extname} = require('path')
|
11 |
|
12 | exports.getBabelConfig = function getBabelConfig(opts) {
|
13 | const {
|
14 | target,
|
15 | type,
|
16 | targetsBrowsers = ['last 2 versions', 'IE 10'],
|
17 | targetsNode = 8,
|
18 | runtimeHelpers,
|
19 | corejs = 3,
|
20 | filePath,
|
21 | nodeFiles,
|
22 | browserFiles,
|
23 | typescript,
|
24 | babelLodashOption = {},
|
25 | lazy,
|
26 | } = opts
|
27 | let isBrowser = target === 'browser'
|
28 | if (filePath) {
|
29 | if (extname(filePath) === '.tsx' || extname(filePath) === '.jsx') {
|
30 | isBrowser = true
|
31 | } else if (isBrowser) {
|
32 | if (nodeFiles.includes(filePath)) isBrowser = false
|
33 | } else if (browserFiles.includes(filePath)) isBrowser = true
|
34 | }
|
35 | const targets = isBrowser ? {browsers: targetsBrowsers} : {node: targetsNode}
|
36 |
|
37 | return {
|
38 | presets: [
|
39 | ...(typescript ? [require.resolve('@babel/preset-typescript')] : []),
|
40 | [
|
41 | require.resolve('@babel/preset-env'),
|
42 | {targets, modules: type === 'esm' ? false : 'auto'},
|
43 | ],
|
44 | ...(isBrowser ? [require.resolve('@babel/preset-react')] : []),
|
45 | ],
|
46 | plugins: [
|
47 | ...(type === 'cjs' && lazy && !isBrowser
|
48 | ? [
|
49 | [
|
50 | require.resolve('@babel/plugin-transform-modules-commonjs'),
|
51 | {
|
52 | lazy: true,
|
53 | },
|
54 | ],
|
55 | ]
|
56 | : []),
|
57 | require.resolve('babel-plugin-react-require'),
|
58 | require.resolve('@babel/plugin-syntax-dynamic-import'),
|
59 | require.resolve('@babel/plugin-proposal-export-default-from'),
|
60 | require.resolve('@babel/plugin-proposal-export-namespace-from'),
|
61 | require.resolve('@babel/plugin-proposal-do-expressions'),
|
62 | [require.resolve('@babel/plugin-proposal-decorators'), {legacy: true}],
|
63 | [require.resolve('@babel/plugin-proposal-class-properties'), {loose: true}],
|
64 | [require.resolve('@babel/plugin-proposal-optional-chaining')],
|
65 | ...(babelLodashOption
|
66 | ? [require.resolve('babel-plugin-lodash'), babelLodashOption]
|
67 | : []),
|
68 | ...(runtimeHelpers
|
69 | ? [
|
70 | [
|
71 | require.resolve('@babel/plugin-transform-runtime'),
|
72 | {useESModules: isBrowser && type === 'esm', corejs},
|
73 | ],
|
74 | ]
|
75 | : []),
|
76 | ],
|
77 | }
|
78 | }
|