uni-app vue3+vite配置跨域时都会报TypeError: Failed to fetch dynamically imported module

发布于 1周前 作者 zlyuanteng 来自 Uni-App

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


6 回复

请问解决了吗,怎么解决的


你好 请问解决了吗?

你好,请问这个问题解决了吗

请问解决了吗?之前看过别的解决办法是加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.jsvite.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策略的实施。

回到顶部