babel.config.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. module.exports = function(api) {
  2. var validEnv = ['development', 'test', 'production'];
  3. var currentEnv = api.env();
  4. var isDevelopmentEnv = api.env('development');
  5. var isProductionEnv = api.env('production');
  6. var isTestEnv = api.env('test');
  7. if (!validEnv.includes(currentEnv)) {
  8. throw new Error(
  9. 'Please specify a valid `NODE_ENV` or ' +
  10. '`BABEL_ENV` environment variables. Valid values are "development", ' +
  11. '"test", and "production". Instead, received: ' +
  12. JSON.stringify(currentEnv) +
  13. '.'
  14. );
  15. }
  16. return {
  17. presets: [
  18. isTestEnv && [
  19. require('@babel/preset-env').default,
  20. {
  21. targets: {
  22. node: 'current',
  23. },
  24. },
  25. ],
  26. (isProductionEnv || isDevelopmentEnv) && [
  27. require('@babel/preset-env').default,
  28. {
  29. forceAllTransforms: true,
  30. useBuiltIns: 'usage',
  31. corejs: '3.0.1',
  32. modules: false,
  33. exclude: ['transform-typeof-symbol'],
  34. },
  35. ],
  36. [
  37. require('@babel/preset-react').default,
  38. {
  39. development: isDevelopmentEnv || isTestEnv,
  40. useBuiltIns: 'usage',
  41. corejs: '3.0.1',
  42. },
  43. ],
  44. ].filter(Boolean),
  45. plugins: [
  46. require('react-hot-loader/babel'),
  47. require('babel-plugin-macros'),
  48. require('@babel/plugin-syntax-dynamic-import').default,
  49. isTestEnv && require('babel-plugin-dynamic-import-node'),
  50. require('@babel/plugin-transform-destructuring').default,
  51. [
  52. require('@babel/plugin-proposal-class-properties').default,
  53. {
  54. loose: true,
  55. },
  56. ],
  57. [
  58. require('@babel/plugin-proposal-object-rest-spread').default,
  59. {
  60. useBuiltIns: true,
  61. },
  62. ],
  63. [
  64. require('@babel/plugin-transform-runtime').default,
  65. {
  66. helpers: false,
  67. regenerator: true,
  68. },
  69. ],
  70. [
  71. require('@babel/plugin-transform-regenerator').default,
  72. {
  73. async: false,
  74. },
  75. ],
  76. isProductionEnv && [
  77. require('babel-plugin-transform-react-remove-prop-types').default,
  78. {
  79. removeImport: true,
  80. },
  81. ],
  82. ].filter(Boolean),
  83. };
  84. };