当前位置: 首页 > 知识库问答 >
问题:

vue3 + vite 动态加载?

漆雕宏浚
2024-04-24

初始:

const lazyLoad = (url: string) => import(`./${url}.vue`);

可以使用,但 vite 有警告:

09:45:57 [vite] warning: invalid import "./${url}.vue". Variable imports cannot import their own directory, place imports in a separate directory or make the import filename more specific. For example: import(`./foo/${bar}.js`).  Plugin: vite:dynamic-import-vars  File: D:/NHANH/WJT/project/intelligence-chart/src/components/configItem/config/main.ts09:45:57 [vite] warning: D:/NHANH/WJT/project/intelligence-chart/src/components/configItem/config/main.ts1  |  import { Eye } from "@vicons/ionicons5";2  |  const lazyLoad = (url) => import(`./${url}.vue`);   |                                   ^^^^^^^^^^^^^^3  |  const Config = {4  |    echarts: {The above dynamic import cannot be analyzed by Vite.See https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations for supported dynamic import formats. If this is intended to be left as-is, you can use the /* @vite-ignore */ comment inside the import() call to suppress this warning.

移动文件并改为:

const lazyLoad = (url: string) => import(`./config/${url}.vue`);

vite 没有警告了,但浏览器控制台报错:

Uncaught (in promise) Error: Unknown variable dynamic import: ./config/echarts/line/data.vue

或是 不移动 文件改为:

const lazyLoad = (url: string) => import(`../config/${url}.vue`);

都不行,这是为什么?
如何处理?

共有1个答案

史俊德
2024-04-24

首先,让我们解决为什么会出现这些错误和警告。

Vite 的警告:
Vite 在处理动态导入时有一些限制。特别是,它不支持从变量中直接导入文件。这是为了防止可能的循环依赖和确保构建过程的可预测性。因此,当你尝试使用 import(./${url}.vue) 这样的导入语句时,Vite 会发出警告。

解决方法是,如你所做的,将动态导入的模块放在一个单独的目录中,并使用更具体的路径进行导入,如 import(./config/${url}.vue)

但是,你提到了浏览器控制台报错的问题。这个错误表明,尽管路径看起来是正确的,但 Vite 或浏览器无法找到指定的文件。

可能的原因和解决方法:

  1. 文件路径问题:确保 ./config/${url}.vue 指向的文件确实存在于项目的文件系统中。
  2. 大小写敏感性:某些操作系统(如 Linux)对文件路径是大小写敏感的。确保你的导入路径与实际文件的大小写完全匹配。
  3. Vite 配置:检查你的 Vite 配置,确保没有设置可能干扰动态导入的选项。
  4. 使用 /* @vite-ignore */:尽管这不会解决问题,但如果你确定动态导入是预期的,并且想要忽略 Vite 的警告,可以在 import() 调用中使用 /* @vite-ignore */ 注释。但这并不是解决问题的根本方法。
const lazyLoad = (url: string) => import(/* @vite-ignore */ `./config/${url}.vue`);
  1. 检查其他插件或工具:确保没有其他的构建插件或工具(如 TypeScript 编译器)在处理这些动态导入时产生问题。
  2. 清除缓存和重新启动:有时候,Vite 或其他构建工具可能会缓存先前的构建结果。尝试清除缓存(例如,删除 .vite 目录)并重新启动开发服务器。

如果以上方法都不能解决问题,建议进一步查看你的项目配置和代码,以确定问题的确切原因。同时,确保查阅 Vite 和相关工具的最新文档和社区,看看是否有其他人遇到了类似的问题。

 类似资料:
  • 这个所属公司里面我想动态添加几个从接口获取的二级行业并且生成对应的路由点击跳转不同的页面,这个在vue3和vite项目中要怎么实现呢 就比如这种效果 我想的是先通过rouer.option.route获取route,然后再拿到这个所属公司这个route,其次再获取接口拿到接口数据,通过addroute添加进去路由里面,然后我试了下这个方案不太行,而且会重复添加,我也不能设置一个变量去防止他重复添加

  • 现在做的是动态编辑菜单 我想给这个菜单添加svg代码用作图标,但是我发现动态添加的svg代码是不会被识别的。 (Icon是自己封装的) 静态的svg代码就可以被识别 动态的就原样的打印出来了

  • vite首屏打开很慢 第一次进入页面也是,页面加载很慢,用了elementui按需引入插件,会加载很多elementui的依赖包,项目vite版本4.4.5 尝试过导入"vite-plugin-optimize-persist""vite-plugin-package-config"这两个插件也报错了,貌似说v2.9版本以上就用不了了 ,两个插件已被弃用,只能自己配置 optimizeDeps 选

  • 环境: vite2.9 + vue3 vben框架 vite使用了分包 会多出一个vendor.xxx.js 以及 vendor.xxx.css; 然后再注入到index.html的时候,会先导入vendor.xxx.css 然后再注入index.xxx.css,这就导致了第三方库的一些样式被后面的index.xxx.css所覆盖,这种如何解决 我再plugin中,改变了之前的css的加载顺序,结

  • 我这样写,test和img是有图片的,但是中间的两个div就一点效果都没有,也不报错。不知道是哪里的问题,网上有说使用require的,但是require在用的时候会报错require is not defined,不过原理应该也是转成一个url吧,这里试了一下也不行,这种背景图应该怎么加才对?

  • vite.config.ts文件代码 图片显示页面代码 下面是我build生成后的文件,我前面明明有一个room的文件夹,但是build后确直接在assets文件夹下面生成了,这是什么原因?还有../assets/${name}这里为什么不能写成@/assets/${name}?