返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vite引入虚拟文件的实现
  • 710
分享到

Vite引入虚拟文件的实现

2024-04-02 19:04:59 710人浏览 泡泡鱼
摘要

目录背景引入虚拟文件例子文档typescript支持总结背景 在新项目升级vue3以后,自然而然的就把Vue-cli&webpack更换成了vite,不得不说vite真的很

背景

在新项目升级vue3以后,自然而然的就把Vue-cli&webpack更换成了vite,不得不说vite真的很香,不仅编译速度刚刚的,而且在vue3的新功能上也有更好的支持.

不过在开发过程中也遇到了一些问题

在看到vite-plugin-pages插件之后,突然看到这样的写法:


import routes from "virtual:generated-pages";

其实在使用很多vite插件的时候,发现在引用中存在这样的用法:


import xxx from "virtual:xxx";

那么这个virtual:xxx怎么之前没有见过,这明显不是一个npm上面的包,那会是什么?

引入虚拟文件

在看了vite的文档之后才明白,原来这是一个引入虚拟文件功能,他可以生成一个虚拟的文件让你来引入.

在vite文档的插件api中引入一个虚拟文件处说到这个功能,章节里面有写到支持引入你一个虚拟文件,也就是这个文件并不存在,而是通过代码临时生成的.

而这个生成是通过vite的插件来完成,也就是说在nodejs环境中来生成对应的虚拟文件

vite-plugin-pages就是通过这个功能实现的,他首先在编译时遍历对应的页面目录,根据目录结构和文件名的命名规则来动态生成对应的路由表,这样就很好的完成了本地目录结构到动态路由之间的良好交互.

其实在nuxt中也有动态路由的功能,不过他可没有虚拟引入,在项目启动前来动态修改WEBpack配置,使用definePlugin来将路由表传递给前端代码的.

通过引入虚拟文件的功能,我们就避免了需要通过传递修改常量的方式,将对应的数据传递给前端代码.

而除了传递常量,虚拟引入可以做的更多,要知道他可是引入的是一个虚拟js文件,这表示我们也可以动态的生成函数以及代码逻辑在其中.

例子

举个例子,比如可以在生成的代码中自动导入需要的文件,然后返回一个函数,通过这个函数来使用之前导入的文件,这样我们就不需要在实际使用的导入这些文件了,通过返回虚拟文件中导出的函数我们就可以直接使用这些本来要导入的文件.


import a from 'a-module'
import b from 'b-module'
...
import z from 'z-module'

const modules = {a,b,...,z}

export default useModule(name){
    return modules[name]
}

之前使用 👇


import a from 'a-module'
import b from 'b-module'
...
import z from 'z-module

a()
b()
c()

现在使用 👇


import useModule from 'virtual:xxx'

const a = useModule('a')
const b = useModule('b')
const c = useModule('c')

当然这只是一个简单的例子,你可以更多的发挥自己的想象力还是先更多的功能

文档

我们来回到文档来看看具体功能是如何实现的呢?

文档中给出的例子如下:


export default function myPlugin() {
  const virtualFileId = '@my-virtual-file'  

  return {
    name: 'my-plugin', // 必须的,将会在 warning 和 error 中显示
    resolveId(id) {
      if (id === virtualFileId) {
        return virtualFileId
      }
    },
    load(id) {
      if (id === virtualFileId) {
        return `export const msg = "from virtual file"`
      }
    }
  }
}

可以看出其中主要又三个关键点:

  • virtualFileId : 需要引入的虚拟文件名
  • resolveId(id): 判断是否是需要解析的虚拟文件名
  • load(id): 返回对应的虚拟引入文件的代码字符串

可以看出返回的代码是以字符串的方式返回的,我们可以通过模板拼接或模板转译的方式来方便我们构建需要返回的代码字符串.

Typescript支持

不过需要注意的是虚拟文件引入返回的是js代码而不是ts代码,而且代码是动态生成的这也说明在使用过程中我们会遇到在TS中没有类型支持的情况

那么如果你的代码结构是确定的可以提前生成对应的d.ts定义文件.然后通过 在tsconfig中配置compilerOptions.types加载对应的定义文件即可,如果代码结构是动态的,那么就需要动态生成对应的d.ts文件写入到项目中来实现.


declare module 'virtual:xxx' {
...
}

总结

可以看出引入虚拟文件是一个很实用的功能,它不仅可以让前端代码可以与编译环境进行交互,而且可以动态的生成代码来实现一些以前不是那么方便实现的功能,而开发起来具体实现也很简单,你准备在你的插件中使用了么?

到此这篇关于Vite引入虚拟文件的实现的文章就介绍到这了,更多相关Vite引入虚拟文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vite引入虚拟文件的实现

本文链接: https://lsjlt.com/news/133064.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vite引入虚拟文件的实现
    目录背景引入虚拟文件例子文档Typescript支持总结背景 在新项目升级vue3以后,自然而然的就把vue-cli&webpack更换成了vite,不得不说vite真的很...
    99+
    2024-04-02
  • vue3+vite引入插件unplugin-auto-import的方法
    自动引入 composition api,不需要再手动引入。github地址:https://github.com/antfu/unplugin-auto-import 下载 npm...
    99+
    2022-11-13
    vue3引入插件unplugin-auto-import vue3 vite插件
  • Oracle中怎么实现虚拟索引
    Oracle中怎么实现虚拟索引,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.创建一个测试表testSQL> create&...
    99+
    2024-04-02
  • VMware虚拟机与主机共享文件夹的实现
    目录前言一、前提二、设置共享文件夹三、使用共享文件夹总结前言 在安装了虚拟机之后,当我们想将文件从主机拷到虚拟机当中时,因为不能直接将文件从主机拖到虚拟机中,所以只能借助U盘,但是频...
    99+
    2023-03-06
    VMware主机共享文件夹 VMware 共享文件夹
  • VUE3+vite项目中动态引入组件与异步组件的详细实例
    目录一、全量注册,随用随取1. 把项目中所有vue文件注册成异步组件。2. 获取组件3. 参考如下二、使用@rollup/plugin-dynamic-import-vars插件 1...
    99+
    2024-04-02
  • react引入虚拟dom的原因是什么
    这篇“react引入虚拟dom的原因是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“r...
    99+
    2024-04-02
  • 深入探讨vite是怎么解析.env文件的
    使用vue框架开发前端项目时,我们部署的时候都会部署多套环境,往往开发、测试以及线上环境调用的接口域名都是不一样的。如何能做到区分呢?那就是使用环境变量和模式。使用vite构建的vue3项目中,可以在根目录下创建.env.[模式]文件定义一...
    99+
    2023-05-14
    前端 Vite Vue.js
  • VMware虚拟机与主机共享文件夹如何实现
    这篇“VMware虚拟机与主机共享文件夹如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VMware虚拟机与主机共享文...
    99+
    2023-07-05
  • elementselect实现组件虚拟滚动优化
    目录组件实现总结不知道大家在开发过程中有没有遇到这样一个场景,后端接口一次性返回上千条数据(比如国家地区),接口不支持分页,不能筛选,只能前端自己通过 select 组件全...
    99+
    2023-05-15
    element select滚动优化 element select 优化
  • React虚拟列表的实现
    目录1.背景 2.什么是虚拟列表 3.相关概念简介 4.虚拟列表实现 4.1 驱动开发:参数剖析4.2 组件初始化计算和布局 4.3 滚动触发注册事件与更新 4.4 item高度不等...
    99+
    2024-04-02
  • html引入css文件的方法
    这篇文章给大家分享的是有关html引入css文件的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。引入方法:1、使用link标签引入,语法“<link rel="stylesheet"...
    99+
    2023-06-15
  • css引入字体文件的方法
    这篇文章主要介绍了css引入字体文件的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在css中,可以使用“@font-face”规则来引入字体文件,语法格式“@font-...
    99+
    2023-06-06
  • Linux文件服务器实战详解(虚拟用户)
    vsftpd基于系统用户访问ftp服务器,系统用户越多越不利于管理,不利于系统安全,这样就以vsftp虚拟防护的方式来解决。 虚拟用户没有实际的真实系统用户,,而是通过映射到其中一个真实用户以及设置相应权限来访问验证,虚...
    99+
    2022-06-04
    linux 文件服务器
  • 如何解析Java虚拟机的Class文件
    这篇文章给大家介绍如何解析Java虚拟机的Class文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前面发了几篇学习笔记,但是看这些东西总是感觉很"玄乎",来一篇实战的东西来揭一下"JV...
    99+
    2023-06-17
  • 如何查看虚拟机的日志文件
    要查看虚拟机的日志文件,可以按照以下步骤操作: 打开虚拟机管理软件,比如VirtualBox、VMware等。 在虚拟机管理软件中选择要查看日志的虚拟机。 在虚拟机的菜单或设置中找到日志选项。 点击日志选项,可以查看虚拟机的各种日志信息,...
    99+
    2024-06-11
    virtualbox
  • 怎么利用flat.vmdk文件恢复ESXI虚拟机的vmdk文件
    这篇文章主要讲解了“怎么利用flat.vmdk文件恢复ESXI虚拟机的vmdk文件”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用flat.vmdk文件恢复ESXI虚拟机的vmdk文件...
    99+
    2023-06-04
  • 深入理解Python虚拟机中描述器的实现原理
    目录描述器的基本用法描述器的实现原理描述器的应用场景实现属性访问控制实现数据验证和转换实现延迟加载和缓存实现 ORM 映射总结在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使...
    99+
    2023-05-19
    Python虚拟机描述器实现原理 Python 描述器 Python虚拟机
  • Asp.Net Core 中的“虚拟目录”实现
    写在前面   现在部署Asp.Net Core应用已经不再限制于Windows的IIS上,更多的是Docker容器、各种反向代理来部署。也有少部分用IIS部署的,IIS部署确实...
    99+
    2022-06-07
    net ASP ASP.NET 虚拟目录 core
  • vue如何实现虚拟dom的patch
    这篇文章主要为大家展示了“vue如何实现虚拟dom的patch”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何实现虚拟dom的patch”这篇文章吧。具...
    99+
    2024-04-02
  • React虚拟列表的实现方法
    这篇文章给大家分享的是有关React虚拟列表的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.背景在开发过程中,总是遇到很多列表的显示。当上数量级别的列表渲染于浏览器,终会导致浏览器的性能下降。如果数据...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作