babel.config.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. module.exports = {
  2. presets: [
  3. [
  4. '@babel/preset-env',
  5. {
  6. // 防止babel将任何模块类型都转译成CommonJS类型,导致tree-shaking失效问题
  7. modules: false,
  8. // 只导入需要的 polyfill
  9. useBuiltIns: 'usage',
  10. // 指定 corjs 版本
  11. corejs: 3,
  12. targets: {
  13. browsers: ['last 2 versions'], // 最近 2 个版本的浏览器
  14. },
  15. },
  16. ],
  17. // 转jsx
  18. '@babel/preset-react',
  19. '@babel/preset-typescript',
  20. ],
  21. // @babel/runtime-corejs3 是辅助函数
  22. plugins: [
  23. // 开发库/工具、移除冗余工具函数(helper function)
  24. [
  25. '@babel/plugin-transform-runtime',
  26. {
  27. corejs: {
  28. version: 3,
  29. proposals: true,
  30. },
  31. useESModules: true,
  32. },
  33. ],
  34. ['@babel/plugin-proposal-optional-chaining'], // 解析 可选链式语法
  35. ['import', { libraryName: 'antd', style: true }], // 关键点: "style": true
  36. ],
  37. env: {
  38. development: {
  39. plugins: ['dynamic-import-node'],
  40. },
  41. production: {
  42. plugins: [
  43. // 函数组件中的变量提升到函数外来避免每次重新调用函数组件重复声明和没必要的垃圾回收
  44. '@babel/plugin-transform-react-constant-elements',
  45. // https://github.com/facebook/react/issues/3228
  46. '@babel/plugin-transform-react-inline-elements',
  47. [
  48. '@babel/plugin-proposal-decorators',
  49. {
  50. legacy: true,
  51. },
  52. ],
  53. [
  54. 'import',
  55. {
  56. libraryName: 'antd',
  57. libraryDirectory: 'es',
  58. style: 'css',
  59. },
  60. ],
  61. ],
  62. },
  63. },
  64. };