vite vue 单页面优化

import { resolve } from 'path'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import svgLoader from 'vite-svg-loader'
import eslint from 'vite-plugin-eslint'
import vueSetupExtend from 'vite-plugin-vue-setup-extend'
import viteCompression from 'vite-plugin-compression';


const fs = require('fs')
const path = require('path')

const config = loadEnv('development', process.cwd())
const baseUrl = config.VITE_APP_BASE_API_PROXY

// console.log('config---',config)

// if(config.VITE_BUILD_ENV==='development' || config.VITE_BUILD_ENV==='release'){
let json_obj = { version_str: new Date().getTime().toString() }
fs.mkdir(path.join(__dirname, '../public/json'), { recursive: true }, err => {
  if (err) {
    return console.error(err)
  }
  console.log('创建public文件夹成功')
  fs.writeFile(path.resolve(__dirname, '../public/json/version.json'), JSON.stringify(json_obj), function (err) {
    if (err) {
      return console.error(err)
    }
    console.log('打包字符串写入文件:static/json/version.json,成功!')
  })
})
// }

export default defineConfig({
  mode: 'development',
  server: {
    open: false,
    port: 9529,
    fs: {
      strict: true
    },
    hmr: true // 开启热更新
    // proxy: {
    //   '/oms': {
    //     target: 'http://localhost:7000', // 代理的线上的接口地址
    //     // 如果要代理 websockets
    //     ws: true,
    //     changeOrigin: true,
    //     rewrite: (path)=>path.replace('/oms/','/')
    //   },
    //   "^/[cmsomsbmswmswms]+/api":{
    //     target: baseUrl,
    //     ws: true,
    //     changeOrigin: true,
    //     // pathRewrite: {   //重写路径,这种是没有我们定义的前缀
    //     //   ['^' + process.env.VUE_APP_BASE_API]: ''
    //     // }
    //   }
    // }
  },
  plugins: [
    vue({
      template: {
        transformAssetUrls: {
          img: ['src', 'public'],
          image: ['src', 'public'],
          'a-image': ['src', 'xlink:href', 'public']
        }
      }
    }),
    vueJsx(),
    svgLoader({ svgoConfig: {} }),
    vueSetupExtend(),
    // 打包压缩,主要是本地gzip,如果服务器配置压缩也可以
    viteCompression(),
  ],
  resolve: {
    alias: [
      {
        find: '@',
        replacement: resolve(__dirname, '../src')
      },
      //   {
      //     find: 'assets',
      //     replacement: resolve(__dirname, '../src/assets')
      //   },
      {
        find: 'vue-i18n',
        replacement: 'vue-i18n/dist/vue-i18n.cjs.js' // Resolve the i18n warning issue
      },
      {
        find: 'vue',
        replacement: 'vue/dist/vue.esm-bundler.js' // compile template
      }
    ],
    extensions: ['.ts', '.js']
  },
  define: {
    'process.env': {}
  },
  build: {
    chunkSizeWarningLimit: 500,
    // minify: 'terser',
    manifest: true,
    cssCodeSplit: false,
    // terserOptions: {
    //   compress: {
    //     // warnings: false,
    //     drop_console: true,  //打包时删除console
    //     drop_debugger: true, //打包时删除 debugger
    //     pure_funcs: ['console.log'],
    //   },
    //   output: {
    //     // 去掉注释内容
    //     comments: true,
    //   },
    // },
    rollupOptions: {
      output: {
        // 入口文件名
        entryFileNames: 'assets/[name]-[hash].js',
        // 块文件名
        chunkFileNames: 'assets/[name]-[hash].js',
        // 资源文件名 css 图片等等
        // -[hash]-balabala
        assetFileNames: 'assets/[name]-[hash].[ext]',
        manualChunks: {
          // 拆分代码,这个就是分包,配置完后自动按需加载
          vue: ['vue', 'vue-router'],
          arcoDesign: ['@arco-design/web-vue'],
          echarts: ['echarts'],
          lodash: ['lodash'],
          vueEcharts: ['vue-echarts']
          // echarts: ['echarts'],
        },
      },
    },
    reportCompressedSize: false, // 启用/禁用 gzip 压缩大小报告
  }

})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值