VITE+VUE3动态导入组件

这篇具有很好参考价值的文章主要介绍了VITE+VUE3动态导入组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

通常的动态组件导入方式

  vue中又是时候我们会使用到动态组件导入,比如路由组件的动态导入,一般类似路由组件的动态导入的方式:

()=>import(path);
()=>defineAsyncComponent(()=>import(path))

vite中使用的错误

但是这写方式进行动态导入组件的时候在vite+vue3项目下都是不行的,开发环境下给与如下的警告提示:

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() 

如果是打包完成之后进行运行就会出现类似如下的错误:

TypeError: Failed to fetch dynamically imported module: http://127.0.0.1:8080/view/home/test.vue

总之就是找不到组件。一开始,我以为是路径不对,最后查了好久才发现在vite中动态导入组件这种方式根本不行。那vite不让使用这种方式进行动态导入路由,总得给个解决方案吧……

解决方案

  后来查看官网VITE找到了如下模块导入功能方式:

import.meta.glob(path)

const modules = import.meta.glob('./dir/*.js')

// vite 生成的代码
const modules = {
  './dir/foo.js': () => import('./dir/foo.js'),
  './dir/bar.js': () => import('./dir/bar.js')
}

  这个时候出现了新的问题就是这个path不能使用变量,只能是固定值,这个在官网中有图下注意说明:

1. 这只是一个 Vite 独有的功能而不是一个 Web 或 ES 标准
2. 该 Glob 模式会被当成导入标识符:必须是相对路径(以 ./ 开头)或绝对路径(以 / 开头,相对于项目根目录解析)或一个别名路径(请看 resolve.alias 选项)。
3. Glob 匹配是使用 fast-glob 来实现的 —— 阅读它的文档来查阅 支持的 Glob 模式。
4. 你还需注意,所有 import.meta.glob 的参数都必须以字面量传入。你 不 可以在其中使用变量或表达式。

  既然可以使用通配符,所以我们就可以通过以下方式来实现组件的动态导入功能:

const viteComponents = import.meta.glob("../**/*.vue");

{
    component: viteComponents['../'+path], 
}

也就是说,组件在一开始用已经全部导入了,我们只是通过路径获取组件,所以只要匹配上路径就能获取到对应的组件了。文章来源地址https://www.toymoban.com/news/detail-621876.html

到了这里,关于VITE+VUE3动态导入组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 + vite Cannot access ‘xxx‘ before initialization 组件热更新失败,es模块循环引用问题

    问题原因 本人 在 pinia stores 文件中使用了 router ,而main.ts 已经引入过router main.ts pinia 下 modelCache.ts 文件 pinia 下 modelCache.ts 文件使用了router 并Model组件中 引入了modelCache.ts 该文件 这样导致es模块循环 vite热更新失败 解决 pinia 下 modelCache.ts 文件 router 引入方式改为 函数引入 在

    2024年02月12日
    浏览(60)
  • Vue3+vite路由配置优化(自动化导入)

    今天在维护优化公司中台项目时,发现路由的文件配置非常多非常乱,只要只中大型项目,都会进入很多的路由页面,规范一点的公司还会吧路由进行模块化导入,但是依然存在很多文件夹的和手动导入的问题。 于是我想到了我之前使用vuex时进行的模块化自动导入js文件,能

    2024年02月08日
    浏览(21)
  • vue3+vite路由中使用element自动导入图标

    el-icon v-if=\\\"childItem.meta childItem.meta.icon\\\"          component :is=\\\"childItem.meta.icon\\\" / /el-icon import { createRouter, createWebHashHistory } from \\\'vue-router\\\' import Layout from \\\'../layout/index.vue\\\' import { markRaw } from \\\'vue\\\' export const asyncRoutes = [   {     path: \\\'/\\\',     name: \\\'HomePage\\\',     component: Layout,     redir

    2024年02月15日
    浏览(34)
  • vue3 + vite 多项目多模块打包

    vue3 + vite 多项目多模块打包 本示例基于 vite-plugin-html 插件,实现多个独立项目共存,共享组件和依赖,运行、打包互不干扰。 兼容性注意 Vite 需要 Node.js 14.18+、16+版本,有些模板需要更高的版本 虽然创建项目用的14.17.5版本,但是后面运行项目用的18.15.0 HTML模板插件 打包一

    2024年02月10日
    浏览(38)
  • Vue3动态路由(Vite+Vue3+TS+Mock)

    Vue通过路由进行页面管理,不同的路由绑定到不同的页面。一般来说,前端直接写好的路由为静态路由,在不修改代码的情况下,路由表是不会改变的。对于不需要动态改变路由表的网站,静态路由就已经足够了,但是当页面需要与权限进行绑定时,不同用户允许浏览的页面

    2024年02月02日
    浏览(84)
  • Vue3+Vite+TypeScript常用项目模块详解

      目录 1.Vue3+Vite+TypeScript 概述 1.1 vue3  1.1.1 Vue3  概述 1.1.2 vue3的现状与发展趋势 1.2 Vite 1.2.1 现实问题 1.2 搭建vite项目 1.3 TypeScript 1.3.1 TypeScript 定义 1.3.2 TypeScript 基本数据类型  1.3.3 TypeScript语法简单介绍 2. 项目配置简单概述 2.1 eslint 校验代码工具配置 2.1.1 eslint定义 2.1.2 esl

    2024年02月08日
    浏览(29)
  • vue3创建项目,vite+js

    之前的时候大哥就让我自己搭架子,但是我拖延症,现在用到了,得自己搭了 我的项目都放到了 VuePorjects这个目录里面, 一、先进入到指定工作目录,(不是你要创建的项目的名称哈) 二、创建vue3项目,安装创建项目  @latest是项目名称,可以自己修改项目名称,然后选择

    2024年02月16日
    浏览(45)
  • 前端 vite+vue3——写一个随机抽奖组件

    大家好,我是yma16,本文分享关于前端 vite+vue3——写一个抽奖随机组件。 vue3系列相关文章: 前端vue2、vue3去掉url路由“ # ”号——nginx配置 csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板 认识vite_vue3 初始化项目到打包 python_selenuim获取csdn新星赛道选手所在城

    2024年02月08日
    浏览(30)
  • Vue3的vite中图片的动态加载

    vite官网的静态资源引入参考地址 new URL() + import.meta.url 注意:这里只能通过 …/…/ 这种方式去获取路径,无法通过@/assets

    2024年02月16日
    浏览(27)
  • vite+vue3+ts项目中提示无法找到模块

    今天在开发过程中碰到了导入模块时提示无法找到模块这个问题,分享一下我的解决思路 首先产生这个错误是: 无法找到模块XXX,并且提示\\\'XXX\\\' is declared but its value is never read 产生这个问题的原因是我们使用了ts语法,他只能识别.ts文件,并不能识别.vue文件,所以在引入组件

    2024年02月11日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包