vue.config.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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('@pc', resolve(__dirname, 'src/packages/pc/'))
  36. .set('@mobile', resolve(__dirname, 'src/packages/mobile/'))
  37. config.plugin('compressionPlugin')
  38. .use(new CompressionPlugin({
  39. test: /\.js$|\.html$|\.css/, // 匹配文件名
  40. threshold: 10240, // 对超过10k的数据压缩
  41. }))
  42. config.plugin('fork-ts-checker')
  43. .use(new ForkTsCheckerWebpackPlugin({
  44. typescript: {
  45. memoryLimit: 4096,
  46. },
  47. }))
  48. },
  49. configureWebpack: (config) => {
  50. const oem = process.env.VUE_APP_OEM
  51. if (oem) {
  52. // 打包时复制指定目录文件到目标目录
  53. config.plugins.push(new CopyWebpackPlugin({
  54. patterns: [
  55. {
  56. from: resolve(__dirname, oem), // 指定目录
  57. to: resolve(__dirname, './dist'), // 目标目录
  58. force: true, // 强制覆盖文件
  59. }
  60. ]
  61. }))
  62. }
  63. }
  64. })