| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { defineConfig, loadEnv } from 'vite'
- import vue from '@vitejs/plugin-vue'
- import path from 'path'
- import legacy from '@vitejs/plugin-legacy'
- export default defineConfig(({ mode }) => {
- const env = loadEnv(mode, process.cwd())
- return {
- plugins: [
- // 关键调整:适配5+App的WebView(安卓5.0+/iOS 10+)
- legacy({
- targets: ['Android >= 5.0', 'iOS >= 10'], // 精准适配移动端WebView
- additionalLegacyPolyfills: ['regenerator-runtime/runtime'], // 补充ES6+兼容
- renderLegacyChunks: true, // 生成兼容包
- polyfills: [
- 'es.symbol',
- 'es.promise',
- 'es.array.iterator',
- 'es.object.assign' // 解决低版本WebView的对象赋值兼容
- ]
- }),
- vue({
- template: {
- compilerOptions: {
- isCustomElement: (tag) => {
- return ['block', 'category', 'field', 'shadow', 'value', 'sep', 'label'].includes(tag)
- }
- }
- }
- }),
- ],
- base: './', // 保留相对路径(核心,不能改)
- resolve: {
- alias: {
- '@': path.resolve(__dirname, './src') // 保留别名
- }
- },
- server: {
- host: '0.0.0.0',
- proxy: {
- '/admin-api': {
- target: env.VITE_BASE_URL,
- changeOrigin: true
- }
- }
- },
- build: {
- outDir: 'aiWeb', // 保留原有输出目录(打包后生成aiWeb文件夹)
- target: 'es2015', // 关键:降低编译目标,适配旧WebView
- assetsDir: 'assets', // 明确静态资源目录
- rollupOptions: {
- output: {
- entryFileNames: `assets/[name]-[hash].js`,
- chunkFileNames: `assets/[name]-[hash].js`,
- assetFileNames: ({ name }) => {
- const extType = name.split('.').pop();
- if (/png|jpe?g|gif|svg|webp/i.test(extType)) {
- return `assets/images/[name]-[hash].[ext]`;
- }
- if (/woff2?|ttf|otf|eot/i.test(extType)) {
- return `assets/typeface/[name]-[hash].[ext]`;
- }
- if (/mp4/i.test(extType)) {
- return `assets/02video/[name]-[hash].[ext]`;
- }
- return `assets/[name]-[hash].[ext]`;
- }
- }
- },
- // 可选:关闭压缩(避免低版本WebView解析压缩代码失败)
- minify: mode === 'production' ? 'terser' : false,
- terserOptions: {
- compress: {
- drop_console: false // 保留控制台日志,方便调试
- }
- }
- }
- }
- })
|