vue3打包配置

vue3打包配置

1、vite.config.js文件

主要配置在于base和build

复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
import vueJsx from '@vitejs/plugin-vue-jsx'

export default defineConfig({
	resolve: {
		alias: {
			'@': path.resolve(__dirname, 'src')
		},
		extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']
	},
	define: {
		__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
	},
	base: '/qc/', // 应用的基本路径前缀
	plugins: [
		vue(),
		vueJsx()
	],
	css: {
		preprocessorOptions: {
			less: {
				javascriptEnabled: true
			}
		}
	},
	server: {
		host: '0.0.0.0',
		port: 9530,
		open: true, //在服务器启动时自动在浏览器中打开应用程序
		headers: {
			'Cross-Origin-Embedder-Policy': 'require-corp',
			'Cross-Origin-Opener-Policy': 'same-origin'
		},
		proxy: {
			'/yxy-api': {
				target: 'http://172.16.15.71:8008',
				changeOrigin: true,
				rewrite: (path) => path.replace(/^\/yxy-api/, '')
			}
		}
	},
	build: {
		chunkSizeWarningLimit: 160000,
		outDir: 'yxy-qc-front'
	}
})

2、路由模式

(1)将路由模式修改为history,将路由模式修改为history模式时,正常访问是没有问题的,但当界面刷新时,会出现404的问题,该问题需要后端配合

js 复制代码
try_files $uri $uri/ /screen/index.html; 

(2)路由前统一添加前缀

复制代码
const router = createRouter({
	routes: constantRoutes,
	history: createWebHistory('/qc'),
	scrollBehavior: () => ({ left: 0, top: 0 })
})

3、环境文件中的配置

(1)env.development.js

js 复制代码
# base api
VITE_API_TARGET = '/yxy-api'

(2)env.production.js

js 复制代码
# base api
VITE_API_TARGET = '/qc-api'

由于在本地开发和线上部署的环境,需要请求的地址前缀是不一样的,所以需要在各自的环境文件中去进行配置,来满足不用的需求

(3)在界面使用

复制代码
export const TARGET = import.meta.env.VITE_API_TARGET

4、有时候我们项目中会用到其他应用的地址,但是该应用的地址是不确定的,因此需要将该动态的地址放在public文件夹中,该文件夹中的东西是不参与打包的,我们可以方便快捷的修改打包后文件,快速部署应用

(1)env.development.json

js 复制代码
{
  "loginSite": "http://172.16.15.71:8080",
  "basePrefix": "/qc"
}

(2)env.production.json

js 复制代码
{
  "loginSite": "http://172.16.17.102:7098/portal/#/login/index",
  "basePrefix": "/qc"
}

(3)获取配置变量函数

js 复制代码
export async function loadEnvConfig() {
	const env = import.meta.env.MODE
	const configPath = `/env.${env}.json`
	try {
		const response = await fetch(configPath)
		return await response.json()
	} catch (error) {
		console.error('Failed to load config:', error)
		// 可以在这里提供一个默认配置或抛出异常
		return {
			loginSite: 'http://172.16.17.102:7098/portal/#/login/index'
		}
	}
}

(4)在界面中使用

js 复制代码
const handleLoginOut = () => {
	Modal.confirm({
		title: '提示',
		icon: createVNode(ExclamationCircleOutlined),
		content: '您确定要退出系统吗?',
		okText: '确认',
		cancelText: '取消',
		centered: true,
		destroyOnClose: true,
		onOk() {
			return new Promise(async (resolve) => {
				removeLocalToken()
				const envConfig = await loadEnvConfig()
				window.location.href = envConfig?.loginSite
				resolve()
			}).catch((reject) => console.error('退出时候报错:' + reject))
		},
		onCancel() {}
	})
}
相关推荐
索西引擎3 分钟前
【React】Immer.js 在现代 Redux 生态中的角色:不可变性保障的工程化实现与开发体验优化
前端·javascript·react.js
只一13 分钟前
拿捏大模型输出随机性:Temperature、Top-K 原理 + LangChain 工程落地实战
javascript·langchain
大卫陈15 分钟前
微信小程序虚拟支付实战:从「支付能力被限制」到沙箱调通的全过程
前端·后端
武子康15 分钟前
vLLM 0.25.1:服务没有报错,为什么仍会生成垃圾 Token(5 级正确性门禁 + 自动回滚条件)
前端·人工智能·后端
jyp2012110719 分钟前
Vue3 Diff 算法
前端·vue.js
胡萝卜术22 分钟前
抽象的三级跳:从原生 DOM 到 React 组件树,我们到底在解决什么问题?
前端·javascript·面试
黄敬峰26 分钟前
从零理解React:事件、组件与响应式——一个WebGPU Demo的前端笔记
前端·面试
jun_bai27 分钟前
Orthanc for Windows版PACS服务器安装教程
javascript·扩展屏应用开发
xn713328 分钟前
AI SDK 7 迁移实战:TypeScript 通过后,生产环境还会坏在哪里?
vue.js·人工智能·后端
GuWen_yue32 分钟前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
javascript·react.js·langchain