132 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const path = require('path')
 | |
| const webpack = require('webpack')
 | |
| const createThemeColorReplacerPlugin = require('./config/plugin.config')
 | |
| const CompressionWebpackPlugin = require('compression-webpack-plugin')
 | |
| const productionGzipExtensions = ['js', 'css']
 | |
| 
 | |
| function resolve (dir) {
 | |
|   return path.join(__dirname, dir)
 | |
| }
 | |
| 
 | |
| const isProd = process.env.NODE_ENV === 'production'
 | |
| 
 | |
| const assetsCDN = {
 | |
|   // webpack build externals
 | |
|   externals: {
 | |
|     vue: 'Vue',
 | |
|     'vue-router': 'VueRouter',
 | |
|     vuex: 'Vuex',
 | |
|     axios: 'axios'
 | |
|   },
 | |
|   css: [],
 | |
|   // https://unpkg.com/browse/vue@2.6.10/
 | |
|   js: [
 | |
|     '//cdn.jsdelivr.net/npm/vue@2.6.10/dist/vue.min.js',
 | |
|     '//cdn.jsdelivr.net/npm/vue-router@3.1.3/dist/vue-router.min.js',
 | |
|     '//cdn.jsdelivr.net/npm/vuex@3.1.1/dist/vuex.min.js',
 | |
|     '//cdn.jsdelivr.net/npm/axios@0.19.0/dist/axios.min.js'
 | |
|   ]
 | |
| }
 | |
| 
 | |
| // vue.config.js
 | |
| const vueConfig = {
 | |
|   configureWebpack: {
 | |
|     // webpack plugins
 | |
|     plugins: [
 | |
|       // Ignore all locale files of moment.js
 | |
|       new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
 | |
|       // 配置compression-webpack-plugin压缩
 | |
|       new CompressionWebpackPlugin({
 | |
|         algorithm: 'gzip',
 | |
|         test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
 | |
|         threshold: 10240,
 | |
|         minRatio: 0.8
 | |
|       })
 | |
|     ],
 | |
|     // if prod, add externals
 | |
|     externals: isProd ? assetsCDN.externals : {}
 | |
|   },
 | |
| 
 | |
|   chainWebpack: (config) => {
 | |
|     config.resolve.alias
 | |
|       .set('@$', resolve('src'))
 | |
| 
 | |
|     const svgRule = config.module.rule('svg')
 | |
|     svgRule.uses.clear()
 | |
|     svgRule
 | |
|       .oneOf('inline')
 | |
|       .resourceQuery(/inline/)
 | |
|       .use('vue-svg-icon-loader')
 | |
|       .loader('vue-svg-icon-loader')
 | |
|       .end()
 | |
|       .end()
 | |
|       .oneOf('external')
 | |
|       .use('file-loader')
 | |
|       .loader('file-loader')
 | |
|       .options({
 | |
|         name: 'assets/[name].[hash:8].[ext]'
 | |
|       })
 | |
| 
 | |
|     // if prod is on
 | |
|     // assets require on cdn
 | |
|     if (isProd) {
 | |
|       config.plugin('html').tap(args => {
 | |
|         args[0].cdn = assetsCDN
 | |
|         return args
 | |
|       })
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   css: {
 | |
|     loaderOptions: {
 | |
|       less: {
 | |
|         modifyVars: {
 | |
|           'primary-color': '#1890FF',
 | |
|           'layout-color': '#1890FF',
 | |
|           'border-radius-base': '2px'
 | |
|         },
 | |
|         // DO NOT REMOVE THIS LINE
 | |
|         javascriptEnabled: true
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   devServer: {
 | |
|     port: 81,
 | |
|     proxy: {
 | |
|       '/api': {
 | |
|         target: process.env.VUE_APP_API_BASE_URL,
 | |
|         ws: false,
 | |
|         changeOrigin: true,
 | |
|         pathRewrite: {
 | |
|           '^/api': '' // 需要rewrite的,
 | |
|         }
 | |
|       },
 | |
|       '/pspace-server': {
 | |
|         target: 'https://c3abc956bca5.ngrok-free.app',
 | |
|         changeOrigin: true,
 | |
|         secure: false,
 | |
|         pathRewrite: {
 | |
|           '^/pspace-server': '/',
 | |
|         },
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // disable source map in production
 | |
|   productionSourceMap: false,
 | |
|   lintOnSave: undefined,
 | |
|   // babel-loader no-ignore node_modules/*
 | |
|   transpileDependencies: []
 | |
| }
 | |
| 
 | |
| // preview.pro.loacg.com only do not use in your production;
 | |
| if (process.env.VUE_APP_PREVIEW === 'true') {
 | |
|   // eslint-disable-next-line no-labels
 | |
|   // runtimeCompiler: true,
 | |
|   // add `ThemeColorReplacer` plugin to webpack plugins
 | |
|   vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin())
 | |
| }
 | |
| 
 | |
| module.exports = vueConfig
 | 
