vue.config.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. const path = require("path");
  2. const resolve = (dir) => path.join(__dirname, dir);
  3. // const SVGSpriteLoaderPlugin = require("svg-sprite-loader/plugin");
  4. function extendDefaultPlugins (arr) {
  5. let plug = [
  6. 'removeDoctype',
  7. 'removeXMLProcInst',
  8. 'removeComments',
  9. 'removeMetadata',
  10. 'removeEditorsNSData',
  11. 'cleanupAttrs',
  12. 'mergeStyles',
  13. 'inlineStyles',
  14. 'minifyStyles',
  15. 'cleanupIDs',
  16. 'removeUselessDefs',
  17. 'cleanupNumericValues',
  18. 'convertColors',
  19. 'removeUnknownsAndDefaults',
  20. 'removeNonInheritableGroupAttrs',
  21. 'removeUselessStrokeAndFill',
  22. 'removeViewBox',
  23. 'cleanupEnableBackground',
  24. 'removeHiddenElems',
  25. 'removeEmptyText',
  26. 'convertShapeToPath',
  27. 'convertEllipseToCircle',
  28. 'moveElemsAttrsToGroup',
  29. 'moveGroupAttrsToElems',
  30. 'collapseGroups',
  31. 'convertPathData',
  32. 'convertTransform',
  33. 'removeEmptyAttrs',
  34. 'removeEmptyContainers',
  35. 'mergePaths',
  36. 'removeUnusedNS',
  37. 'sortDefsChildren',
  38. 'removeTitle',
  39. 'removeDesc'
  40. ];
  41. return plug.concat(arr);
  42. }
  43. // 添加less继承
  44. function addStyleResource (rule) {
  45. rule.use('style-resource')
  46. .loader('style-resources-loader')
  47. .options({
  48. patterns: [
  49. resolve('src/assets/styles/common/common.less')
  50. ]
  51. })
  52. }
  53. module.exports = {
  54. publicPath: "./", // 默认'/',部署应用包时的基本 URL
  55. indexPath: 'index.html', // 相对于打包路径index.html的路径
  56. outputDir: 'dist', // 'dist', 生产环境构建文件的目录
  57. assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
  58. lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
  59. runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
  60. chainWebpack: (config) => {
  61. config.resolve.symlinks(true); // 修复热更新失效
  62. // 路径别名
  63. config.resolve.alias
  64. .set("@", resolve("src"))
  65. .set("@node", resolve("node_modules"))
  66. .set("@com", resolve("src/components"))
  67. .set("@assets", resolve("src/assets"))
  68. .set("@api", resolve("src/api"))
  69. .set("@store", resolve("src/store"))
  70. .set("@modeConfig", resolve("public/static/config"))
  71. .set("@tools", resolve("src/tools"));
  72. // less 继承
  73. const types = ['vue-modules', 'vue', 'normal-modules', 'normal'];
  74. types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type)));
  75. // svg 雪碧图
  76. config.module // 排除其他svg-loader
  77. .rule('svg')
  78. .exclude.add(resolve('src/assets/icon/svg'))
  79. .end()
  80. .exclude.add(resolve('src/assets/icon/svg_fill'))
  81. .end();
  82. // svg雪碧图
  83. const svgRule = config.module.rule('icons');
  84. svgRule.test(/\.svg$/)
  85. .include.add(resolve('src/assets/icon/svg'))
  86. .end()
  87. .use('svg-sprite-loader')
  88. .loader('svg-sprite-loader')
  89. .options({
  90. symbolId: 'svg-[name]',
  91. // extract: true,
  92. // publicPath: "img/",
  93. // spriteFilename: "svg-sprite-[hash:8].svg",
  94. });
  95. // config
  96. // .plugin("svgsprite")
  97. // .use(SVGSpriteLoaderPlugin, [{
  98. // plainSprite: true
  99. // }]);
  100. // svgo 去除svg中无用元素
  101. svgRule.use('svgo-loader').loader('svgo-loader').options({
  102. plugins: extendDefaultPlugins([{
  103. name: "removeAttrs",
  104. params: {
  105. attrs: 'fill',
  106. }
  107. }])
  108. });
  109. // svg雪碧图 不去除fill属性
  110. // const svgRuleFill = config.module.rule('icons_fill');
  111. // svgRuleFill.test(/\.svg$/)
  112. // .include.add(resolve('src/assets/icon/svg_fill'))
  113. // .end()
  114. // .use('svg-sprite-loader')
  115. // .loader('svg-sprite-loader')
  116. // .options({
  117. // symbolId: 'fill-[name]',
  118. // // extract: true,
  119. // // publicPath: "img/",
  120. // // spriteFilename: "svg-sprite-[hash:8].svg",
  121. // });
  122. // // config
  123. // // .plugin("svgsprite")
  124. // // .use(SVGSpriteLoaderPlugin, [{
  125. // // plainSprite: true
  126. // // }]);
  127. // // svgo 去除svg中无用元素
  128. // svgRuleFill.use('svgo-loader').loader('svgo-loader').options({
  129. // plugins: extendDefaultPlugins([])
  130. // });
  131. },
  132. // devServer: {
  133. // //代理配置
  134. // proxy: {
  135. // '/lightmatrix': {
  136. // target: 'https://h5.caibeike.com.cn/', // 请求地址
  137. // changeOrigin: true, // 在vue-cli3中,默认changeOrigin的值是true,意味着服务器host设置成target,这与vue-cli2不一致,vue-cli2这个默认值是false
  138. // // changeOrigin的值是true,target是host, request URL是http://baidu.com
  139. // // 如果设置changeOrigin: false,host就是浏览器发送过来的host,也就是localhost:8082。
  140. // pathRewrite: { // 路径重写,eg:把api接口替换为''
  141. // '^/h5.caibeike.com.cn/': 'localhost:8888/'
  142. // }
  143. // }
  144. // },
  145. // open: false, // 是否打开浏览器
  146. // }
  147. }