vue.config.js 6.7 KB

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