156 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			156 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | 'use strict' | |||
|  | const path = require('path') | |||
|  | const CompressionPlugin = require('compression-webpack-plugin')// 引入gzip压缩插件
 | |||
|  | const defaultSettings = require('./src/settings.js') | |||
|  | 
 | |||
|  | function resolve(dir) { | |||
|  |   return path.join(__dirname, dir) | |||
|  | } | |||
|  | 
 | |||
|  | const name = defaultSettings.title || 'go-dmin' // page title
 | |||
|  | 
 | |||
|  | // If your port is set to 80,
 | |||
|  | // use administrator privileges to execute the command line.
 | |||
|  | // For example, Mac: sudo npm run
 | |||
|  | // You can change the port by the following method:
 | |||
|  | // port = 9527 npm run dev OR npm run dev --port = 9527
 | |||
|  | const port = process.env.port || process.env.npm_config_port || 9527 // dev port
 | |||
|  | 
 | |||
|  | // const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin')
 | |||
|  | 
 | |||
|  | // All configuration item explanations can be find in https://cli.vuejs.org/config/
 | |||
|  | module.exports = { | |||
|  |   /** | |||
|  |    * You will need to set publicPath if you plan to deploy your site under a sub path, | |||
|  |    * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
 | |||
|  |    * then publicPath should be set to "/bar/". | |||
|  |    * In most cases please use '/' !!! | |||
|  |    * Detail: https://cli.vuejs.org/config/#publicpath
 | |||
|  |    */ | |||
|  |   publicPath: '/', | |||
|  |   outputDir: 'dist', | |||
|  |   // assetsDir: '../../static/admin',
 | |||
|  |   // assetsDir: '/',
 | |||
|  |   lintOnSave: process.env.NODE_ENV === 'development', | |||
|  |   productionSourceMap: false, | |||
|  |   devServer: { | |||
|  |     port: port, | |||
|  |     open: false, | |||
|  |     overlay: { | |||
|  |       warnings: false, | |||
|  |       errors: true | |||
|  |     } | |||
|  |   }, | |||
|  |   configureWebpack: { | |||
|  |     plugins: [ | |||
|  |       new CompressionPlugin({ | |||
|  |         algorithm: 'gzip', | |||
|  |         test: /\.js$|\.html$|\.css/, // 匹配文件名
 | |||
|  |         threshold: 10240, // 对超过10kb的数据进行压缩
 | |||
|  |         deleteOriginalAssets: false, // 是否删除原文件
 | |||
|  |         minRatio: 0.8 | |||
|  |       }) | |||
|  |       // new MonacoWebpackPlugin()
 | |||
|  |     ], | |||
|  |     name: name, | |||
|  |     resolve: { | |||
|  |       alias: { | |||
|  |         '@': resolve('src') | |||
|  |       } | |||
|  |     } | |||
|  |   }, | |||
|  |   chainWebpack(config) { | |||
|  |     // it can improve the speed of the first screen, it is recommended to turn on preload
 | |||
|  |     // config.plugins.delete('preload')
 | |||
|  | 
 | |||
|  |     // when there are many pages, it will cause too many meaningless requests
 | |||
|  |     config.plugins.delete('prefetch') //
 | |||
|  | 
 | |||
|  |     config.module | |||
|  |       .rule('svg') | |||
|  |       .exclude.add(resolve('src/icons')) | |||
|  |       .end() | |||
|  |     config.module | |||
|  |       .rule('icons') | |||
|  |       .test(/\.svg$/) | |||
|  |       .include.add(resolve('src/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 | |||
|  |       .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') | |||
|  |         } | |||
|  |       ) | |||
|  |   }, | |||
|  |   css: { | |||
|  |     loaderOptions: { | |||
|  |       less: { | |||
|  |         modifyVars: { | |||
|  |           // less vars,customize ant design theme
 | |||
|  | 
 | |||
|  |           // 'primary-color': '#F5222D',
 | |||
|  |           // 'link-color': '#F5222D',
 | |||
|  |           'border-radius-base': '2px' | |||
|  |         }, | |||
|  |         // DO NOT REMOVE THIS LINE
 | |||
|  |         javascriptEnabled: true | |||
|  |       } | |||
|  |     } | |||
|  |   } | |||
|  | } |