babel.config.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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: 'entry',
  31. modules: false,
  32. exclude: ['transform-typeof-symbol'],
  33. },
  34. ],
  35. [
  36. require('@babel/preset-react').default,
  37. {
  38. development: isDevelopmentEnv || isTestEnv,
  39. useBuiltIns: true,
  40. },
  41. ],
  42. ].filter(Boolean),
  43. plugins: [
  44. require('react-hot-loader/babel'),
  45. require('babel-plugin-macros'),
  46. require('@babel/plugin-syntax-dynamic-import').default,
  47. isTestEnv && require('babel-plugin-dynamic-import-node'),
  48. require('@babel/plugin-transform-destructuring').default,
  49. [
  50. require('@babel/plugin-proposal-class-properties').default,
  51. {
  52. loose: true,
  53. },
  54. ],
  55. [
  56. require('@babel/plugin-proposal-object-rest-spread').default,
  57. {
  58. useBuiltIns: true,
  59. },
  60. ],
  61. [
  62. require('@babel/plugin-transform-runtime').default,
  63. {
  64. helpers: false,
  65. regenerator: true,
  66. },
  67. ],
  68. [
  69. require('@babel/plugin-transform-regenerator').default,
  70. {
  71. async: false,
  72. },
  73. ],
  74. isProductionEnv && [
  75. require('babel-plugin-transform-react-remove-prop-types').default,
  76. {
  77. removeImport: true,
  78. },
  79. ],
  80. ].filter(Boolean),
  81. };
  82. };