webview加载vue3报错_vite打包esmodule文件无法加载_legacy如何使用
2024-11-21 17:49:49
我们使用vite打包vue3时,不做处理会让app加载webview时无法正常加载。下面会列出处理方法让file能正常加载vite打包的vue3单页面
1104
我们使用app的webview加载vite打包的vue3静态文件时,会遇到无法找到文件或者文件跨域的问题。最根本的原因是app的webview加载file文件,不能加载esmodule的文件。 更改app端是比较复杂的,所以采用更改vite打包的静态文件形式。
操作步骤
安装vitejs/plugin-legacy插件
npm i @vitejs/plugin-legacy -D
更改打包配置
vite.config.js
import { defineConfig } from 'vite'; import legacy from '@vitejs/plugin-legacy'; export default defineConfig({ plugins: [ legacy({ targets: ['defaults', 'not IE 11'] }) ] })
格式化静态文件
新增 bin/htmlFormat.js
const fs = require('fs'); const htmlPath = './dist/index.html'; // 打包后的html文件路径 const htmlText = fs.readFileSync(htmlPath, 'utf8'); const htmlArr = htmlText.match(/.* /g) || []; let result = ''; htmlArr.forEach((v) => { v = v .replace(/script ?nomodules?/g, 'script ') .replace(/s?crossorigins?/g, ' ') .replace(/<link rel="modulepreload" href="[^"]+.js">/g, '') .replace("System.import(document.getElementById('vite-legacy-entry').getAttribute('src'))", '') .replace(/data-src/g, 'src'); if (!v.includes(`script type="module"`)) { result += v; } }); fs.writeFileSync(htmlPath, result, 'utf8');
打包测试
npm run build npm run htmlFormat
webview加载静态文件
能正常访问静态文件即可
注意事项
webview加载本地单页面时,最好采用hash路由模式
参考文档:https://www.jianshu.com/p/14cce9ff60c2