babel.config.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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-relay')],
  38. require('@babel/plugin-syntax-dynamic-import').default,
  39. isTestEnv && require('babel-plugin-dynamic-import-node'),
  40. require('@babel/plugin-transform-destructuring').default,
  41. [
  42. require('@babel/plugin-proposal-class-properties').default,
  43. {
  44. loose: true,
  45. },
  46. ],
  47. [
  48. require('@babel/plugin-proposal-object-rest-spread').default,
  49. {
  50. useBuiltIns: true,
  51. },
  52. ],
  53. [
  54. require('@babel/plugin-transform-runtime').default,
  55. {
  56. helpers: false,
  57. regenerator: true,
  58. },
  59. ],
  60. [
  61. require('@babel/plugin-transform-regenerator').default,
  62. {
  63. async: false,
  64. },
  65. ],
  66. isProductionEnv && [
  67. require('babel-plugin-transform-react-remove-prop-types').default,
  68. {
  69. removeImport: true,
  70. },
  71. ],
  72. ].filter(Boolean),
  73. };
  74. };