广告
返回顶部
首页 > 资讯 > 前端开发 > 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://www.lsjlt.com/news/133064.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vite引入虚拟文件的实现
    目录背景引入虚拟文件例子文档Typescript支持总结背景 在新项目升级vue3以后,自然而然的就把vue-cli&webpack更换成了vite,不得不说vite真的很...
    99+
    2022-11-12
  • VUE3+vite项目中动态引入组件与异步组件的详细实例
    目录一、全量注册,随用随取1. 把项目中所有vue文件注册成异步组件。2. 获取组件3. 参考如下二、使用@rollup/plugin-dynamic-import-vars插件 1...
    99+
    2022-11-13
  • VMware虚拟机与主机共享文件夹的实现
    目录前言一、前提二、设置共享文件夹三、使用共享文件夹总结前言 在安装了虚拟机之后,当我们想将文件从主机拷到虚拟机当中时,因为不能直接将文件从主机拖到虚拟机中,所以只能借助U盘,但是频...
    99+
    2023-03-06
    VMware主机共享文件夹 VMware 共享文件夹
  • VMware虚拟机与主机共享文件夹如何实现
    这篇“VMware虚拟机与主机共享文件夹如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“VMware虚拟机与主机共享文...
    99+
    2023-07-05
  • 深入理解Python虚拟机中描述器的实现原理
    目录描述器的基本用法描述器的实现原理描述器的应用场景实现属性访问控制实现数据验证和转换实现延迟加载和缓存实现 ORM 映射总结在本篇文章当中主要给大家介绍一个我们在使用类的时候经常使...
    99+
    2023-05-19
    Python虚拟机描述器实现原理 Python 描述器 Python虚拟机
  • js如何实现引入外部文件时避免产生乱码
    小编给大家分享一下js如何实现引入外部文件时避免产生乱码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在页面中,引入外部文件,如 js,css等, 如果外部文件和当前页文件的编码不一致,容易产生乱码,引发错误。 在引入外部...
    99+
    2023-06-08
  • Java+EasyExcel实现文件的导入导出
    目录引言效果图项目结构核心源码核心实体类核心监听器类EasyExcel导入文件EasyExcel导出文件引言 项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息...
    99+
    2022-11-12
  • 如何实现将txt文件名写入文件首行的bat
    这篇文章给大家分享的是有关如何实现将txt文件名写入文件首行的bat的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:@echo off&color 0f&setlocal enablede...
    99+
    2023-06-08
  • Vue实现自定义组件的方式引入图标
    这篇文章主要讲解了“Vue实现自定义组件的方式引入图标”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue实现自定义组件的方式引入图标”吧!前言在项目开发中,使用图标的方式有很多种,可以在i...
    99+
    2023-06-20
  • 详解Linux系统中虚拟设备文件的各种实用用法
    大家好,我是良许。 大家知道,在 Linux 下,一切皆文件,对于设备文件也是如此。我们在工作的过程中,经常会看到 /dev/null 这个玩意,那它到底是什么呢? 专业地讲,/dev/null 是一个虚拟设备文件。...
    99+
    2022-06-03
    linux 虚拟设备文件用法 linux 虚拟设备文件
  • Python实现文本文件拆分写入到多个文本文件的方法
    引言 将一个txt文本文件中的内容行拆分固定的行数,自动分批写入到多个文本文件。 比如:一个源txt文件有5100行数据,每1000行插入到一个txt文件,最后获得6个txt文件(5...
    99+
    2022-11-12
  • 如何实现Windows宿主系统和虚拟机ubuntu系统文件互相访问
    今天就跟大家聊聊有关如何实现Windows宿主系统和虚拟机ubuntu系统文件互相访问,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。我的宿主操作系统是Windows 10,使用Ora...
    99+
    2023-06-06
  • python实现搜索本地文件信息写入文件的方法
    本文实例讲述了python实现搜索本地文件信息写入文件的方法。分享给大家供大家参考,具体如下: 主要功能: 在指定的盘符,如D盘,搜索出与用户给定后缀名(如:jpg,png)相关的文件,然后把搜索出来的信息...
    99+
    2022-06-04
    本地文件 文件 方法
  • Python文件索引的实现原理及其在文件加载中的应用。
    Python文件索引的实现原理及其在文件加载中的应用 在Python中,文件是一种常见的数据类型,因此在应用程序中经常需要读写文件。当文件数量很大时,我们需要使用一种快速的方式来查找和访问文件。这时,文件索引就发挥了重要作用。本文将介绍Py...
    99+
    2023-09-28
    文件 索引 load
  • 深入理解Python虚拟机中元组(tuple)的实现原理及源码
    目录元组的结构元组操作函数源码剖析创建元组查看元组的长度元组当中是否包含数据获取和设置元组中的数据释放元组内存空间总结元组的结构 在这一小节当中主要介绍在 python 当中元组的数...
    99+
    2023-03-11
    Python 虚拟机 元组 Python虚拟机 Python 元组
  • Android入门之读写本地文件的实现
    目录简介课程目标UI端后端代码运行效果简介 为了这个系列,我的代码已经准备到了第150天了。接下来的内容会越来越精彩,我们也越来越开始进入Android的一些高级功能上的编程了。今天...
    99+
    2022-12-20
    Android读写本地文件 Android 本地文件 Android读写文件
  • Java+EasyExcel如何实现文件的导入导出
    这篇文章将为大家详细讲解有关Java+EasyExcel如何实现文件的导入导出,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引言项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导...
    99+
    2023-06-22
  • C++文件的数据写入和文件的数据读取怎么实现
    这篇文章主要介绍了C++文件的数据写入和文件的数据读取怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++文件的数据写入和文件的数据读取怎么实现文章都会有所收获,下面我们一起来看看吧。一:没有数据,准备...
    99+
    2023-07-02
  • 如何用PHP实现高效的文件索引同步?
    当我们需要对大量文件进行索引和同步时,使用PHP来实现这个目标是非常高效且可靠的。PHP是一种简单而强大的编程语言,可以轻松地处理各种文件和目录操作。 在本文中,我们将探讨如何使用PHP实现高效的文件索引同步。我们将介绍一些常见的技术和工具...
    99+
    2023-07-09
    同步 文件 索引
  • C++文件的数据写入和文件的数据读取的方法实现
    目录一:没有数据,准备数据,写入文件二:读文件操作一:没有数据,准备数据,写入文件 1.main.cpp #include<iostream> using namespa...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作