UNPKG

2.72 kBJavaScriptView Raw
1'use strict'
2
3/**
4 * 文件说明:
5 * ----------------------------------------
6 * 创建用户: leo
7 * 创建日期 2019/1/3
8 */
9
10const {extname} = require('path')
11
12exports.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}