uni-app vue3+vite配置跨域时都会报TypeError: Failed to fetch dynamically imported module
uni-app vue3+vite配置跨域时都会报TypeError: Failed to fetch dynamically imported module
产品分类
uniapp/H5
开发环境信息
项目 | 信息 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 22H2 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.99 |
浏览器平台 | 微信内置浏览器 |
浏览器版本 | hbuildX 3.99版本下内置浏览器 |
项目创建方式 | HBuilderX |
示例代码
"h5": {
"sdkConfigs": {
"maps": {
"qqmap": {
"key": ""
}
}
},
"router": {
"mode": "history"
},
"devServer": {
"https": false,
"port": 8996,
"proxy": {
"/api": {
"pathRewrite": {
"^/api": "/api"
},
"target": "http://123123123123/",
"changeOrigin": true
}
}
}
}
操作步骤
vue3+vite在manifest.json文件和自己新建的vite.config.js文件配置跨域时都会报TypeError: Failed to fetch dynamically imported module: http://localhost:8996/pages/index/index.vue at @fs/C:/Users/Administrator.DESKTOP-H0JLPU7/Desktop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5-vue/dist/vue.runtime.esm.js:1442
预期结果
不报错,且跨域配置成功
实际结果
vue3+vite在manifest.json文件和自己新建的vite.config.js文件配置跨域时都会报TypeError: Failed to fetch dynamically imported module: http://localhost:8996/pages/index/index.vue at @fs/C:/Users/Administrator.DESKTOP-H0JLPU7/Desktop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5-vue/dist/vue.runtime.esm.js:1442
bug描述
vue3+vite在manifest.json文件和自己新建的vite.config.js文件配置跨域时都会报TypeError: Failed to fetch dynamically imported module: http://localhost:8996/pages/index/index.vue at @fs/C:/Users/Administrator.DESKTOP-H0JLPU7/Desktop/HBuilderX/plugins/uniapp-cli-vite/node_modules/@dcloudio/uni-h5-vue/dist/vue.runtime.esm.js:1442
请问解决了吗,怎么解决的
你好 请问解决了吗?
你好,请问这个问题解决了吗
请问解决了吗?之前看过别的解决办法是加CDN,然后开启https服务,禁止浏览器缓存HTML,但是好像偶尔还是会出现
解决了吗
在配置uni-app使用Vue 3和Vite时遇到跨域问题导致的“TypeError: Failed to fetch dynamically imported module”错误,通常是因为Vite在开发服务器中默认没有正确配置CORS(跨源资源共享)策略,或者uni-app的某些特性与Vite的默认配置产生了冲突。以下是一个配置示例,旨在帮助解决这个问题,但请注意,具体实现可能需要根据项目实际情况调整。
1. 配置Vite的代理
首先,确保你的Vite配置文件(vite.config.js
或vite.config.ts
)中设置了正确的代理,以绕过跨域限制。以下是一个配置代理的示例:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
export default defineConfig({
plugins: [vue()],
server: {
proxy: {
'/api': {
target: 'http://backend-server-url', // 替换为你的后端服务器地址
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
});
2. 检查动态导入
如果你在使用动态导入(import()
),确保导入的URL是正确的,并且服务器允许跨域请求。动态导入通常用于按需加载组件或模块。例如:
// 正确的动态导入路径,假设已经通过代理配置了/api前缀
const loadComponent = async () => {
const module = await import('/api/some-module');
const component = module.default;
// 使用组件...
};
3. 配置CORS(如果后端可控)
如果后端服务器在你的控制之下,确保服务器配置了CORS策略,允许来自Vite开发服务器的请求。以下是一个Node.js Express服务器的CORS配置示例:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({
origin: 'http://localhost:3000', // Vite开发服务器的地址
credentials: true
}));
// 其他中间件和路由配置...
app.listen(3001, () => {
console.log('Server is running on port 3001');
});
4. 清理缓存和重启
有时候,浏览器缓存或Vite的缓存可能会导致问题。尝试清理浏览器缓存或使用无痕模式访问,同时重启Vite开发服务器。
结论
以上步骤应能帮助你解决uni-app结合Vue 3和Vite时遇到的跨域问题。如果问题依旧存在,请检查网络请求的具体错误信息,或考虑是否有其他配置或代码影响了CORS策略的实施。