utils.js 1.4 KB

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