Blame view

vue.config.js 4.17 KB
406803045 committed
1 2
'use strict'
const path = require('path')
3
const defaultSettings = require('./src/config/index.js')
406803045 committed
4 5 6 7 8
function resolve(dir) {
  return path.join(__dirname, dir)
}
const name = defaultSettings.title || 'vue mobile template' // page title
const port = 9018 // dev port
9 10 11 12 13
const externals = {
  vue: 'Vue',
  'vue-router': 'VueRouter',
  vuex: 'Vuex',
  vant: 'vant',
406803045 committed
14
  axios: 'axios'
15 16 17 18 19 20
}
// cdn
const cdn = {
  // 开发环境
  dev: {
    css: [],
宋楠 committed
21
    js: []
22 23 24 25 26 27 28 29 30 31 32 33 34 35
  },
  // 生产环境
  build: {
    css: ['https://cdn.jsdelivr.net/npm/vant@beta/lib/index.css'],
    js: [
      'https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js',
      'https://cdnjs.cloudflare.com/ajax/libs/vue-router/3.0.6/vue-router.min.js',
      'https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js',
      'https://cdnjs.cloudflare.com/ajax/libs/vuex/3.1.1/vuex.min.js',
      'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js',
      'https://cdn.jsdelivr.net/npm/vant@beta/lib/vant.min.js'
    ]
  }
}
406803045 committed
36
module.exports = {
宋楠 committed
37 38
  publicPath: './', // router hash 模式使用
  // publicPath: process.env.NODE_ENV === 'development' ? '/' : '/app/', //router history模式使用 需要区分生产环境和开发环境,不然build会报错
406803045 committed
39 40 41 42 43 44
  outputDir: 'dist',
  assetsDir: 'static',
  lintOnSave: process.env.NODE_ENV === 'development',
  productionSourceMap: false,
  devServer: {
    port: port,
406803045 committed
45
    open: false,
406803045 committed
46 47 48
    overlay: {
      warnings: false,
      errors: true
sunnie committed
49 50 51 52 53 54 55 56 57 58 59 60
    },
    // proxy: {
    //   //配置跨域
    //   '/api': {
    //       target: "https://test.xxx.com",
    //       ws:true,
    //       changOrigin:true,
    //       pathRewrite:{
    //           '^/api':'/'
    //       }
    //   }
    // }
406803045 committed
61
  },
406803045 committed
62

63 64 65 66 67 68 69 70 71 72
  configureWebpack: config => {
    // 为生产环境修改配置...
    if (process.env.NODE_ENV === 'production') {
      // externals里的模块不打包
      Object.assign(config, {
        name: name,
        externals: externals
      })
    }
    // 为开发环境修改配置...
宋楠 committed
73 74
    // if (process.env.NODE_ENV === 'development') {
    // }
75
  },
406803045 committed
76 77 78
  chainWebpack(config) {
    config.plugins.delete('preload') // TODO: need test
    config.plugins.delete('prefetch') // TODO: need test
79 80 81 82
    // alias
    config.resolve.alias
      .set('@', resolve('src'))
      .set('assets', resolve('src/assets'))
宋楠 committed
83
      .set('api', resolve('src/api'))
84 85
      .set('views', resolve('src/views'))
      .set('components', resolve('src/components'))
宋楠 committed
86

87 88 89 90 91 92 93 94 95 96 97 98 99
    /**
     * 添加CDN参数到htmlWebpackPlugin配置中, 详见public/index.html 修改
     */
    config.plugin('html').tap(args => {
      if (process.env.NODE_ENV === 'production') {
        args[0].cdn = cdn.build
      }
      if (process.env.NODE_ENV === 'development') {
        args[0].cdn = cdn.dev
      }
      return args
    })

406803045 committed
100 101 102 103 104 105 106 107 108 109 110 111 112
    // 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
406803045 committed
113
      .when(process.env.NODE_ENV === 'development', config => config.devtool('cheap-source-map'))
406803045 committed
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

    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: {
          commons: {
            name: 'chunk-commons',
            test: resolve('src/components'), // can customize your rules
            minChunks: 3, //  minimum common number
            priority: 5,
            reuseExistingChunk: true
宋楠 committed
135 136 137 138 139 140
          },
          libs: {
            name: 'chunk-libs',
            chunks: 'initial', // only package third parties that are initially dependent
            test: /[\\/]node_modules[\\/]/,
            priority: 10
406803045 committed
141 142 143 144 145 146 147
          }
        }
      })
      config.optimization.runtimeChunk('single')
    })
  }
}