utils.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const ExtractTextPlugin = require('extract-text-webpack-plugin');
  2. process.env.NODE_ENV = process.env.NODE_ENV || 'development';
  3. const IS_DEV = process.env.NODE_ENV === 'development';
  4. const IS_TEST = process.env.NODE_ENV === 'test';
  5. function styleLoader({ loaders = [], extract = !IS_DEV, minimize = !IS_DEV, fallback = 'style-loader' } = {}) {
  6. const cssLoader = {
  7. loader: 'css-loader',
  8. options: {
  9. minimize,
  10. importLoaders: 1,
  11. sourceMap: false,
  12. },
  13. };
  14. return extract ? ExtractTextPlugin.extract({
  15. fallback,
  16. use: [cssLoader, ...loaders],
  17. }) : [
  18. fallback,
  19. cssLoader,
  20. ...loaders,
  21. ];
  22. }
  23. function styleRule(options = {}) {
  24. return {
  25. test: /\.css$/,
  26. use: styleLoader(options),
  27. };
  28. }
  29. function merge(obj1, obj2) {
  30. if (!obj2) return obj1;
  31. if (Array.isArray(obj1)) return obj1.concat(obj2);
  32. const obj = Object.assign({}, obj1);
  33. Object.keys(obj2).forEach(key => {
  34. if (typeof obj[key] === 'object') {
  35. obj[key] = merge(obj[key], obj2[key]);
  36. } else {
  37. obj[key] = obj2[key];
  38. }
  39. });
  40. return obj;
  41. }
  42. exports.IS_DEV = IS_DEV;
  43. exports.IS_TEST = IS_TEST;
  44. exports.styleLoader = styleLoader;
  45. exports.styleRule = styleRule;
  46. exports.merge = merge;
  47. exports.definitions = {
  48. 'process.env': {
  49. NODE_ENV: JSON.stringify(process.env.NODE_ENV),
  50. DEBUG: IS_DEV ? 'true' : 'false', // whether to log message errors
  51. },
  52. };