utils.js 1.6 KB

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