| 
					
				 | 
			
			
				@@ -2,11 +2,11 @@ const fs = require('fs'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const path = require('path') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const webpack = require('webpack') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const createThemeColorReplacerPlugin = require('./config/plugin.config') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// gzip 压缩 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// gzip 鍘嬬缉 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const compressionWebpackPlugin = require('compression-webpack-plugin'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// js,css 压缩 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// js,css 鍘嬬缉 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const TerserPlugin = require('terser-webpack-plugin'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 版本自动生成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 鐗堟湰鑷�姩鐢熸垚 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const WebpackVersionPlugin = require('webpack-version-plugin'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const versionConfig = require(resolve('public/version.json')); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -22,13 +22,13 @@ function isProd () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return process.env.NODE_ENV === 'production' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 项目部署基础 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 默认情况下,我们假设你的应用将被部署在域的根目录下, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 例如:https://www.my-app.com/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 默认:'/' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 如果您的应用程序部署在子路径中,则需要在这指定子路径 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 例如:https://www.foobar.com/my-app/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-// 需要将它改为'/my-app/' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 椤圭洰閮ㄧ讲鍩虹� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 榛樿�鎯呭喌涓嬶紝鎴戜滑鍋囪�浣犵殑搴旂敤灏嗚�閮ㄧ讲鍦ㄥ煙鐨勬牴鐩�綍涓�, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 渚嬪�锛歨ttps://www.my-app.com/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 榛樿�锛�'/' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 濡傛灉鎮ㄧ殑搴旂敤绋嬪簭閮ㄧ讲鍦ㄥ瓙璺�緞涓�紝鍒欓渶瑕佸湪杩欐寚瀹氬瓙璺�緞 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 渚嬪�锛歨ttps://www.foobar.com/my-app/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 闇€瑕佸皢瀹冩敼涓�'/my-app/' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const BASE_URL = isProd ? '/' : '/' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const assetsCDN = { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -61,21 +61,21 @@ const prodExternals = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 // vue.config.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  runtimeCompiler: true, // 动态编译组件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  runtimeCompiler: true, // 鍔ㄦ€佺紪璇戠粍浠� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   publicPath: BASE_URL, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   configureWebpack: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     optimization: isProd() ? { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           minimize: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           minimizer: [new TerserPlugin({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              test: /\.js(\?.*)?$/i,    //匹配参与压缩的文件 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              parallel: true,    //使用多进程并发运行 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              terserOptions: {    //Terser 压缩配置 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              test: /\.js(\?.*)?$/i,    //鍖归厤鍙備笌鍘嬬缉鐨勬枃浠� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              parallel: true,    //浣跨敤澶氳繘绋嬪苟鍙戣繍琛� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              terserOptions: {    //Terser 鍘嬬缉閰嶇疆 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   output:{comments: false}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  compress: {//console删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  compress: {//console鍒犻櫎 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       pure_funcs: ["console.log"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              extractComments: true,    //将注释剥离到单独的文件中 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              extractComments: true,    //灏嗘敞閲婂墺绂诲埌鍗曠嫭鐨勬枃浠朵腑 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           })], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }:{}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // webpack plugins 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -83,15 +83,15 @@ const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // Ignore all locale files of moment.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       new compressionWebpackPlugin({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //[file] 会被替换成原始资源。[path] 会被替换成原始资源的路径, [query] 会被替换成查询字符串。默认值是 "[path].gz[query]"。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          filename: '[path].gz[query]', // 提示compression-webpack-plugin@3.0.0的话asset改为filename 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //可以是 function(buf, callback) 或者字符串。对于字符串来说依照 zlib 的算法(或者 zopfli 的算法)。默认值是 "gzip"。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //[file] 浼氳�鏇挎崲鎴愬師濮嬭祫婧愩€俒path] 浼氳�鏇挎崲鎴愬師濮嬭祫婧愮殑璺�緞锛� [query] 浼氳�鏇挎崲鎴愭煡璇㈠瓧绗︿覆銆傞粯璁ゅ€兼槸 "[path].gz[query]"銆� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          filename: '[path].gz[query]', // 鎻愮ずcompression-webpack-plugin@3.0.0鐨勮瘽asset鏀逛负filename 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //鍙�互鏄� function(buf, callback) 鎴栬€呭瓧绗︿覆銆傚�浜庡瓧绗︿覆鏉ヨ�渚濈収 zlib 鐨勭畻娉�(鎴栬€� zopfli 鐨勭畻娉�)銆傞粯璁ゅ€兼槸 "gzip"銆� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           algorithm: 'gzip', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //所有匹配该正则的资源都会被处理。默认值是全部资源。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //鎵€鏈夊尮閰嶈�姝e垯鐨勮祫婧愰兘浼氳�澶勭悊銆傞粯璁ゅ€兼槸鍏ㄩ儴璧勬簮銆� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           test: new RegExp('\\.(' + ['js', 'css'].join('|') + ')$'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //只有大小大于该值的资源会被处理。单位是 bytes。默认值是 0。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //鍙�湁澶у皬澶т簬璇ュ€肩殑璧勬簮浼氳�澶勭悊銆傚崟浣嶆槸 bytes銆傞粯璁ゅ€兼槸 0銆� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           threshold: 10240, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          //只有压缩率小于这个值的资源才会被处理。默认值是 0.8。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          //鍙�湁鍘嬬缉鐜囧皬浜庤繖涓�€肩殑璧勬簮鎵嶄細琚��鐞嗐€傞粯璁ゅ€兼槸 0.8銆� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           minRatio: 0.8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       new WebpackVersionPlugin({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -137,17 +137,17 @@ const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     config.optimization && config.optimization.splitChunks({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 拆包配置  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        chunks: 'all', //三选一:"initial" 初始化,"all"(默认就是all),"async"(动态加载)  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        minSize: 30000, // 形成一个新代码块最小的体积,只有 >= minSize 的bundle会被拆分出来 30000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        maxSize: 0, //拆分之前最大的数值,默认为0,即不做限制 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        minChunks: 1, //引入次数,如果为2 那么一个资源最少被引用两次才可以被拆分出来 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        maxAsyncRequests: 5, // 按需加载的最大并行请求数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        maxInitialRequests: 4, // 一个入口最大并行请求数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        automaticNameDelimiter: '~', // 文件名的连接符 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 鎷嗗寘閰嶇疆  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        chunks: 'all', //涓夐€変竴锛�"initial" 鍒濆�鍖栵紝"all"(榛樿�灏辨槸all)锛�"async"锛堝姩鎬佸姞杞斤級  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        minSize: 30000, // 褰㈡垚涓€涓�柊浠g爜鍧楁渶灏忕殑浣撶Н,鍙�湁 >= minSize 鐨刡undle浼氳�鎷嗗垎鍑烘潵 30000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        maxSize: 0, //鎷嗗垎涔嬪墠鏈€澶х殑鏁板€硷紝榛樿�涓�0锛屽嵆涓嶅仛闄愬埗 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        minChunks: 1, //寮曞叆娆℃暟锛屽�鏋滀负2 閭d箞涓€涓�祫婧愭渶灏戣�寮曠敤涓ゆ�鎵嶅彲浠ヨ�鎷嗗垎鍑烘潵 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        maxAsyncRequests: 5, // 鎸夐渶鍔犺浇鐨勬渶澶у苟琛岃�姹傛暟 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        maxInitialRequests: 4, // 涓€涓�叆鍙f渶澶у苟琛岃�姹傛暟 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        automaticNameDelimiter: '~', // 鏂囦欢鍚嶇殑杩炴帴绗� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         cacheGroups: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // node_modules模块包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // node_modules妯″潡鍖� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         vendors: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           test: /[\\/]node_modules[\\/]/, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           name: 'chunk-vendors', 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -158,7 +158,7 @@ const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           chunks: 'all', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           priority: -10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // UI库单独拆包 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // UI搴撳崟鐙�媶鍖� 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         antDesign: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           name: 'chunk-antDesign', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           priority: 19, //  the weight needs to be larger than libs and app or it will be packaged into libs or app 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -169,18 +169,18 @@ const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           priority: 20, //  the weight needs to be larger than libs and app or it will be packaged into libs or app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           test: /[\\/]node_modules[\\/]_?ant-design-vue(.*)/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // 共享模块 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // 鍏变韩妯″潡 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         common: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           name: 'chunk-common', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           minChunks: 2, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          maxSize: 1024, //拆分之前最大的数值,默认为0,即不做限制 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          maxSize: 1024, //鎷嗗垎涔嬪墠鏈€澶х殑鏁板€硷紝榛樿�涓�0锛屽嵆涓嶅仛闄愬埗 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           priority: -20, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           reuseExistingChunk: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // 分析打包大小 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 鍒嗘瀽鎵撳寘澶у皬 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (process.env.npm_config_report) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       config.plugin('webpack-bundle-analyzer') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -193,7 +193,7 @@ const vueConfig = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     loaderOptions: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       less: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         modifyVars: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          // less vars锛宑ustomize ant design theme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          // less vars閿涘畱ustomize ant design theme 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           'primary-color': process.env.VUE_APP_THEME_COLOR, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           'link-color': process.env.VUE_APP_THEME_COLOR 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // 'border-radius-base': '4px' 
			 |