问题描述:vite4.0构建前端项目嵌入到安卓app壳子中通过iframe方式打开前端页面一直白屏,js报错global-this undefined
解决方案:修改legacy配置及构建时target兼容
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import { URL, fileURLToPath } from 'node:url'
import legacy from '@vitejs/plugin-legacy'
import {createHtmlPlugin} from 'vite-plugin-html'
export default defineConfig((commond, mode) => {
return {
base: './',
build: {
outDir: 'investReport/',
// 小图转base64
assetsInlineLimit: 4096,
minify: 'terser',
terserOptions: {
compress: {
// 去除日志
drop_console: CLIENT === 'prd',
// 去除debugger
drop_debugger: true
}
},
target: 'es2015' // 兼容性配置注意1
},
plugins: [
vue(),
AutoImport({
resolvers: [ElementPlusResolver()],
}),
Components({
resolvers: [ElementPlusResolver()],
}),
// 浏览器兼容,兼容性配置注意2
legacy({
additionalLegacyPolyfills: ['regenerator-runtime/runtime'],
targets: ['defaults', 'not IE 11', 'chrome <= 60'],
modernPolyfills: ['es.global-this'],
polyfills: ['es.global-this'],
renderLegacyChunks: true
}),
// 增加项目构建时间戳标识 自行百度 vite-plugin-html
createHtmlPlugin({
minify: true,
inject: {
data: {
dateTime: new Date().toLocaleString(),
}
}
}),
],
resolve: {
// 路径别名
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url))
}
},
server: {
host: '0.0.0.0'
},
define: {
// 参数透传
'process.env': {
SERVICE_TYPE: JSON.stringify(CLIENT),
}
}
}
})