最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vite引入虛擬文件的實(shí)現(xiàn)

 更新時(shí)間:2021年08月19日 15:34:56   作者:程序員紫菜苔  
本文主要介紹了Vite引入虛擬文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

背景

在新項(xiàng)目升級(jí)vue3以后,自然而然的就把vue-cli&webpack更換成了vite,不得不說(shuō)vite真的很香,不僅編譯速度剛剛的,而且在vue3的新功能上也有更好的支持.

不過(guò)在開(kāi)發(fā)過(guò)程中也遇到了一些問(wèn)題

在看到vite-plugin-pages插件之后,突然看到這樣的寫(xiě)法:

import routes from "virtual:generated-pages";

其實(shí)在使用很多vite插件的時(shí)候,發(fā)現(xiàn)在引用中存在這樣的用法:

import xxx from "virtual:xxx";

那么這個(gè)virtual:xxx怎么之前沒(méi)有見(jiàn)過(guò),這明顯不是一個(gè)npm上面的包,那會(huì)是什么?

引入虛擬文件

在看了vite的文檔之后才明白,原來(lái)這是一個(gè)引入虛擬文件功能,他可以生成一個(gè)虛擬的文件讓你來(lái)引入.

在vite文檔的插件API中引入一個(gè)虛擬文件處說(shuō)到這個(gè)功能,章節(jié)里面有寫(xiě)到支持引入你一個(gè)虛擬文件,也就是這個(gè)文件并不存在,而是通過(guò)代碼臨時(shí)生成的.

而這個(gè)生成是通過(guò)vite的插件來(lái)完成,也就是說(shuō)在nodejs環(huán)境中來(lái)生成對(duì)應(yīng)的虛擬文件

vite-plugin-pages就是通過(guò)這個(gè)功能實(shí)現(xiàn)的,他首先在編譯時(shí)遍歷對(duì)應(yīng)的頁(yè)面目錄,根據(jù)目錄結(jié)構(gòu)和文件名的命名規(guī)則來(lái)動(dòng)態(tài)生成對(duì)應(yīng)的路由表,這樣就很好的完成了本地目錄結(jié)構(gòu)到動(dòng)態(tài)路由之間的良好交互.

其實(shí)在nuxt中也有動(dòng)態(tài)路由的功能,不過(guò)他可沒(méi)有虛擬引入,在項(xiàng)目啟動(dòng)前來(lái)動(dòng)態(tài)修改webpack配置,使用definePlugin來(lái)將路由表傳遞給前端代碼的.

通過(guò)引入虛擬文件的功能,我們就避免了需要通過(guò)傳遞修改常量的方式,將對(duì)應(yīng)的數(shù)據(jù)傳遞給前端代碼.

而除了傳遞常量,虛擬引入可以做的更多,要知道他可是引入的是一個(gè)虛擬js文件,這表示我們也可以動(dòng)態(tài)的生成函數(shù)以及代碼邏輯在其中.

例子

舉個(gè)例子,比如可以在生成的代碼中自動(dòng)導(dǎo)入需要的文件,然后返回一個(gè)函數(shù),通過(guò)這個(gè)函數(shù)來(lái)使用之前導(dǎo)入的文件,這樣我們就不需要在實(shí)際使用的導(dǎo)入這些文件了,通過(guò)返回虛擬文件中導(dǎo)出的函數(shù)我們就可以直接使用這些本來(lái)要導(dǎo)入的文件.

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

現(xiàn)在使用 👇

import useModule from 'virtual:xxx'

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

當(dāng)然這只是一個(gè)簡(jiǎn)單的例子,你可以更多的發(fā)揮自己的想象力還是先更多的功能

文檔

我們來(lái)回到文檔來(lái)看看具體功能是如何實(shí)現(xiàn)的呢?

文檔中給出的例子如下:

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

  return {
    name: 'my-plugin', // 必須的,將會(huì)在 warning 和 error 中顯示
    resolveId(id) {
      if (id === virtualFileId) {
        return virtualFileId
      }
    },
    load(id) {
      if (id === virtualFileId) {
        return `export const msg = "from virtual file"`
      }
    }
  }
}

可以看出其中主要又三個(gè)關(guān)鍵點(diǎn):

  • virtualFileId : 需要引入的虛擬文件名
  • resolveId(id): 判斷是否是需要解析的虛擬文件名
  • load(id): 返回對(duì)應(yīng)的虛擬引入文件的代碼字符串

可以看出返回的代碼是以字符串的方式返回的,我們可以通過(guò)模板拼接或模板轉(zhuǎn)譯的方式來(lái)方便我們構(gòu)建需要返回的代碼字符串.

Typescript支持

不過(guò)需要注意的是虛擬文件引入返回的是js代碼而不是ts代碼,而且代碼是動(dòng)態(tài)生成的這也說(shuō)明在使用過(guò)程中我們會(huì)遇到在TS中沒(méi)有類(lèi)型支持的情況

那么如果你的代碼結(jié)構(gòu)是確定的可以提前生成對(duì)應(yīng)的d.ts定義文件.然后通過(guò) 在tsconfig中配置compilerOptions.types加載對(duì)應(yīng)的定義文件即可,如果代碼結(jié)構(gòu)是動(dòng)態(tài)的,那么就需要?jiǎng)討B(tài)生成對(duì)應(yīng)的d.ts文件寫(xiě)入到項(xiàng)目中來(lái)實(shí)現(xiàn).

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

總結(jié)

可以看出引入虛擬文件是一個(gè)很實(shí)用的功能,它不僅可以讓前端代碼可以與編譯環(huán)境進(jìn)行交互,而且可以動(dòng)態(tài)的生成代碼來(lái)實(shí)現(xiàn)一些以前不是那么方便實(shí)現(xiàn)的功能,而開(kāi)發(fā)起來(lái)具體實(shí)現(xiàn)也很簡(jiǎn)單,你準(zhǔn)備在你的插件中使用了么?

到此這篇關(guān)于Vite引入虛擬文件的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Vite引入虛擬文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)踐---vue不依賴(lài)外部資源實(shí)現(xiàn)簡(jiǎn)單多語(yǔ)操作

    vue實(shí)踐---vue不依賴(lài)外部資源實(shí)現(xiàn)簡(jiǎn)單多語(yǔ)操作

    這篇文章主要介紹了vue實(shí)踐---vue不依賴(lài)外部資源實(shí)現(xiàn)簡(jiǎn)單多語(yǔ)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue-cli3.0項(xiàng)目打包后如何修改訪問(wèn)后端地址

    vue-cli3.0項(xiàng)目打包后如何修改訪問(wèn)后端地址

    這篇文章主要介紹了vue-cli3.0項(xiàng)目打包后如何修改訪問(wèn)后端地址,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格中鏈接進(jìn)行頁(yè)面跳轉(zhuǎn)與路由詳解

    Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格中鏈接進(jìn)行頁(yè)面跳轉(zhuǎn)與路由詳解

    在vue中進(jìn)行前端網(wǎng)頁(yè)開(kāi)發(fā)時(shí),通常列表數(shù)據(jù)用el-table展示,下面這篇文章主要給大家介紹了關(guān)于Vue+ElementUi實(shí)現(xiàn)點(diǎn)擊表格中鏈接進(jìn)行頁(yè)面跳轉(zhuǎn)與路由的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻

    vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)移動(dòng)端input上傳視頻、音頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解

    vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解

    下面小編就為大家分享一篇vue進(jìn)行圖片的預(yù)加載watch用法實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • antd?vue?table表格內(nèi)容如何格式化

    antd?vue?table表格內(nèi)容如何格式化

    這篇文章主要介紹了antd?vue?table表格內(nèi)容如何格式化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • vue跨域proxy代理配置詳解

    vue跨域proxy代理配置詳解

    今天被vue中proxy配置困擾了一天,記錄一下,下面這篇文章主要給大家介紹了關(guān)于Vue配置文件中的proxy配置方式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    Vue3自動(dòng)引入組件與組件庫(kù)的方法實(shí)例

    關(guān)于vue?組件還是非常好用的,真正掌握預(yù)計(jì)需要一段時(shí)間,下面這篇文章主要給大家介紹了關(guān)于Vue3自動(dòng)引入組件與組件庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • vue中使用file-saver導(dǎo)出文件的全過(guò)程記錄

    vue中使用file-saver導(dǎo)出文件的全過(guò)程記錄

    這篇文章主要給大家介紹了關(guān)于vue中使用file-saver導(dǎo)出文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示

    Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示

    這篇文章主要介紹了Vue通過(guò)axios發(fā)送ajax請(qǐng)求基礎(chǔ)演示,包括了axios發(fā)送簡(jiǎn)單get請(qǐng)求,axios get傳參,axios發(fā)送post請(qǐng)求等基礎(chǔ)代碼演示需要的朋友可以參考下
    2023-02-02

最新評(píng)論

安多县| 凤台县| 平安县| 抚松县| 会东县| 西峡县| 阳东县| 神木县| 绥滨县| 秦皇岛市| 衡东县| 毕节市| 荔浦县| 陆良县| 泌阳县| 荃湾区| 新巴尔虎右旗| 那曲县| 开阳县| 雷州市| 衡南县| 澎湖县| 甘洛县| 武强县| 德安县| 安宁市| 涿州市| 鄱阳县| 蕉岭县| 调兵山市| 桂阳县| 海盐县| 孟连| 双牌县| 洛川县| 郑州市| 新兴县| 苏尼特左旗| 通州区| 兰西县| 岱山县|