vue.config.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. const { resolve } = require('path')
  2. const { defineConfig } = require('@vue/cli-service')
  3. const moment = require('moment')
  4. const CompressionPlugin = require('compression-webpack-plugin')
  5. const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
  6. const CopyWebpackPlugin = require('copy-webpack-plugin')
  7. module.exports = defineConfig({
  8. transpileDependencies: [/node_modules/],
  9. productionSourceMap: false, // 打包取消.map
  10. publicPath: './',
  11. pages: {
  12. indexPath: {
  13. entry: process.env.VUE_APP_ROOT + 'main.ts',
  14. template: process.env.VUE_APP_ROOT + 'index.html',
  15. filename: 'index.html',
  16. title: process.env.VUE_APP_TITLE,
  17. meta: {
  18. revised: moment(new Date()).format('YYYYMMDDHHmmss') // 打包生成版本号
  19. }
  20. }
  21. },
  22. css: {
  23. extract: true, // 是否使用css分离插件 ExtractTextPlugin
  24. sourceMap: false,
  25. loaderOptions: {
  26. postcss: {
  27. postcssOptions: {
  28. config: process.env.VUE_APP_ROOT, // 自定义 postcss.config.js 文件路径,https://webpack.docschina.org/loaders/postcss-loader/#postcss-options
  29. }
  30. }
  31. }
  32. },
  33. chainWebpack: (config) => {
  34. config.resolve.alias
  35. .set('@' + process.env.VUE_APP_ENV, resolve(__dirname, process.env.VUE_APP_ROOT))
  36. config.plugin('compressionPlugin')
  37. .use(new CompressionPlugin({
  38. test: /\.js$|\.html$|\.css/, // 匹配文件名
  39. threshold: 10240, // 对超过10k的数据压缩
  40. }))
  41. config.plugin('fork-ts-checker')
  42. .use(new ForkTsCheckerWebpackPlugin({
  43. typescript: {
  44. memoryLimit: 4096,
  45. },
  46. }))
  47. },
  48. configureWebpack: (config) => {
  49. const oem = process.env.VUE_APP_OEM
  50. if (oem) {
  51. // 打包时复制指定目录文件到目标目录
  52. config.plugins.push(new CopyWebpackPlugin({
  53. patterns: [
  54. {
  55. from: resolve(__dirname, oem), // 指定目录
  56. to: resolve(__dirname, './dist'), // 目标目录
  57. force: true, // 强制覆盖文件
  58. }
  59. ]
  60. }))
  61. }
  62. }
  63. })