123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- 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)
- }
- /**
- * check production or preview(pro.loacg.com only)
- * @returns {boolean}
- */
- function isProd () {
- return process.env.NODE_ENV === 'production'
- }
- const assetsCDN = {
- 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'
- ]
- }
- // webpack build externals
- const prodExternals = {
- vue: 'Vue',
- 'vue-router': 'VueRouter',
- vuex: 'Vuex',
- axios: 'axios'
- }
- // vue.config.js
- const vueConfig = {
- configureWebpack: {
- // webpack plugins
- plugins: [
- // Ignore all locale files of moment.js
- new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
- ]
- // if prod is on, add externals
- // externals: isProd() ? prodExternals : {}
- },
- 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: {
- // less vars,customize ant design theme
- // 'primary-color': '#F5222D',
- // 'link-color': '#F5222D',
- // 'border-radius-base': '4px'
- },
- // do not remove this line
- javascriptEnabled: true
- }
- }
- },
- devServer: {
- // development server port 8000
- port: 8000,
- // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
- proxy: {
- '/api': {
- target: 'http://localhost:5000',
- ws: false,
- changeOrigin: true,
- pathRewrite: {
- '^/api': ''
- }
- },
- '/files': {
- target: 'http://localhost:5000',
- ws: false,
- changeOrigin: true
- }
- }
- },
- // 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') {
- // console.log('VUE_APP_PREVIEW', true)
- // // add `ThemeColorReplacer` plugin to webpack plugins
- // vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin())
- // }
- vueConfig.configureWebpack.plugins.push(createThemeColorReplacerPlugin())
- if (isProd()) {
- vueConfig.configureWebpack.plugins.push(new CompressionWebpackPlugin({
- filename: '[path].gz[query]', // 提示 compression-webpack-plugin@3.0.0以上的话asset改为filename
- algorithm: 'gzip',
- test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
- threshold: 10240,
- minRatio: 0.8
- }))
- }
- module.exports = vueConfig
|