babel.config.js 2.0 KB

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