前端项目部署之后,运维可以自行修改配置文件里的接口IP,达到无需再次打包就可以使用的效果
vue2如何修改请看vue 部署后修改配置文件(接口IP)_vue部署后修改配置文件-CSDN博客
使用前提:
vite搭建的vue3项目 使用setup语法
需要借助一个插件生成配置文件
npm i vite-plugin-generate-file
env配置
如何配置查看vue .env配置环境变量_如何使用.env.development中定义的变量-CSDN博客
 
 

vite.config.js配置
import { fileURLToPath, URL } from 'node:url'
import { defineConfig,loadEnv  } from 'vite'
import vue from '@vitejs/plugin-vue'
import { createHtmlPlugin } from "vite-plugin-html";
import generateFile from 'vite-plugin-generate-file'
//读取所有当前环境的env
const getViteEnv = (mode, target) => {
  if(target==''){
    return loadEnv(mode, process.cwd());
  }else{
    return loadEnv(mode, process.cwd())[target];
  }
 
 };
 
// https://vitejs.dev/config/
export default   (res=> defineConfig({
  base: "", //等同于  assetsPublicPath :'./'
  plugins: [
    vue(),
    //修改网页的标题
    createHtmlPlugin({
      inject: {
        data: {
          title: getViteEnv(res.mode, "VITE_APP_Title"),
        },
      },
    }),
   //配置输出文件类型和内容
    generateFile([{
      type: 'json',
      output: './config.json',
      data:{
        _hash:new Date().getTime(),
        ...getViteEnv(res.mode, '')
      }
    }])
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  build: {
    terserOptions: {
      compress: {
        keep_infinity: true,
        drop_console: true,
        drop_debugger: true,
      },
    },
    brotliSize: false,
    sourcemap: false,
    //分别打包
    rollupOptions: {
      output: {
        assetFileNames: assetInfo => {
          var info = assetInfo.name.split('.')
          var extType = info[info.length - 1]
          if (
            /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/i.test(assetInfo.name)
          ) {
            extType = 'media'
          } else if (/\.(png|jpe?g|gif|svg)(\?.*)?$/.test(assetInfo.name)) {
            extType = 'img'
          } else if (/\.(woff2?|eot|ttf|otf)(\?.*)?$/i.test(assetInfo.name)) {
            extType = 'fonts'
          }
          return `${extType}/[name]-[hash][extname]`
        },
        chunkFileNames: 'js/[name]-[hash].js',
        entryFileNames: 'js/[name]-[hash].js'
      }
    }
  },
})
)读取配置:
<script setup>
import { onMounted } from "vue";
import { Empty} from "vant"
import axios from 'axios'
onMounted(() => {
  getuserInfo()
});
function getuserInfo(){
  axios({
    method: 'get',
    url: document.location.protocol +'//'+ window.location.host+window.location.pathname+'config.json',
  }).then(res=>{
    console.log('读取配置',res.data);
    
  })
 
}
</script>
<template>
  <div>
   <Empty description="读取用户信息中,请稍后..."></Empty>
  </div>
</template>



















