You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							159 lines
						
					
					
						
							4.5 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							159 lines
						
					
					
						
							4.5 KiB
						
					
					
				| 'use strict' | |
| const path = require('path') | |
| const defaultSettings = require('./src/settings.js') | |
| 
 | |
| function resolve(dir) { | |
|   return path.join(__dirname, dir) | |
| } | |
| const name = defaultSettings.title // 网址标题 | |
| const port = 8018 // 端口配置 | |
| // All configuration item explanations can be find in https://cli.vuejs.org/config/ | |
|  | |
| // const GenerateAssetPlugin = require('generate-asset-webpack-plugin') | |
|  | |
| // const createServerConfig = compilation => { | |
| //   const serverConfig = { | |
| //     BASE_URL: '' // 打包后生成的文件内容,接口地址 | |
| //   } | |
| //   return JSON.stringify(serverConfig) | |
| // } | |
|  | |
| module.exports = { | |
|   // hash 模式下可使用 | |
|   publicPath: process.env.NODE_ENV === 'development' ? '/' : './', | |
|   // publicPath: '/', | |
|   outputDir: 'dist', | |
|   assetsDir: 'static', | |
|   lintOnSave: process.env.NODE_ENV === 'development', | |
|   productionSourceMap: false, | |
|   devServer: { | |
|     port: port, | |
|     open: true, | |
|     overlay: { | |
|       warnings: false, | |
|       errors: true | |
|     }, | |
|     proxy: { | |
|       '/api': { | |
|         target: process.env.VUE_APP_BASE_API, | |
|         changeOrigin: true, | |
|         pathRewrite: { | |
|           '^/api': 'api' | |
|         } | |
|       }, | |
|       '/auth': { | |
|         target: process.env.VUE_APP_BASE_API, | |
|         changeOrigin: true, | |
|         pathRewrite: { | |
|           '^/auth': 'auth' | |
|         } | |
|       } | |
|     } | |
|   }, | |
|   configureWebpack: { | |
|     name: name, | |
|     resolve: { | |
|       alias: { | |
|         '@': resolve('src'), | |
|         '@crud': resolve('src/components/Crud') | |
|       } | |
|     }, | |
|     performance: { | |
|       hints: 'warning', | |
|       // 入口起点的最大体积 | |
|       maxEntrypointSize: 50000000, | |
|       // 生成文件的最大体积 | |
|       maxAssetSize: 30000000 | |
|     } | |
|     // plugins: [ | |
|     //   new GenerateAssetPlugin({ | |
|     //     filename: 'server-config.json', | |
|     //     fn: (compilation, cb) => { | |
|     //       cb(null, createServerConfig(compilation)) | |
|     //     }, | |
|     //     extraFiles: [] | |
|     //   }) | |
|     // ] | |
|   }, | |
|   chainWebpack(config) { | |
|     config.plugins.delete('preload') // TODO: need test | |
|     config.plugins.delete('prefetch') // TODO: need test | |
|  | |
|     // set svg-sprite-loader | |
|     config.module | |
|       .rule('svg') | |
|       .exclude.add(resolve('src/assets/icons')) | |
|       .end() | |
|     config.module | |
|       .rule('icons') | |
|       .test(/\.svg$/) | |
|       .include.add(resolve('src/assets/icons')) | |
|       .end() | |
|       .use('svg-sprite-loader') | |
|       .loader('svg-sprite-loader') | |
|       .options({ | |
|         symbolId: 'icon-[name]' | |
|       }) | |
|       .end() | |
| 
 | |
|     // set preserveWhitespace | |
|     config.module | |
|       .rule('vue') | |
|       .use('vue-loader') | |
|       .loader('vue-loader') | |
|       .tap(options => { | |
|         options.compilerOptions.preserveWhitespace = true | |
|         return options | |
|       }) | |
|       .end() | |
| 
 | |
|     config | |
|       // https://webpack.js.org/configuration/devtool/#development | |
|       .when(process.env.NODE_ENV === 'development', | |
|         config => config.devtool('cheap-source-map') | |
|       ) | |
| 
 | |
|     config | |
|       .when(process.env.NODE_ENV !== 'development', | |
|         config => { | |
|           config | |
|             .plugin('ScriptExtHtmlWebpackPlugin') | |
|             .after('html') | |
|             .use('script-ext-html-webpack-plugin', [{ | |
|             // `runtime` must same as runtimeChunk name. default is `runtime` | |
|               inline: /runtime\..*\.js$/ | |
|             }]) | |
|             .end() | |
|           config | |
|             .optimization.splitChunks({ | |
|               chunks: 'all', | |
|               cacheGroups: { | |
|                 libs: { | |
|                   name: 'chunk-libs', | |
|                   test: /[\\/]node_modules[\\/]/, | |
|                   priority: 10, | |
|                   chunks: 'initial' // only package third parties that are initially dependent | |
|                 }, | |
|                 elementUI: { | |
|                   name: 'chunk-elementUI', // split elementUI into a single package | |
|                   priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app | |
|                   test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm | |
|                 }, | |
|                 commons: { | |
|                   name: 'chunk-commons', | |
|                   test: resolve('src/components'), // can customize your rules | |
|                   minChunks: 3, //  minimum common number | |
|                   priority: 5, | |
|                   reuseExistingChunk: true | |
|                 } | |
|               } | |
|             }) | |
|           config.optimization.runtimeChunk('single') | |
|         } | |
|       ) | |
|   }, | |
|   transpileDependencies: [ | |
|     'vue-echarts', | |
|     'resize-detector' | |
|   ] | |
| }
 |