網站首頁 編程語言 正文
在 Vite
中,批量導入文件的最佳實踐是使用 glob
導入特性。這個特性可以在一行代碼中導入多個文件,而不需要為每個文件編寫獨立的導入語句。
一般的使用場景是,當文件過多或者需要動態導入模塊時,我們需要手動一個個去 import
,但是使用 glob-import
就可以避免這種情況了,大大提高了開發效率。
Vite
是使用 ES
模塊語法進行編程的新型前端構建工具,對于ES
模塊的glob
導入提供了原生支持。
假設有以下目錄結構:
components/
├── Foo.vue
├── Bar.vue
└── Baz.vue
你可以使用 glob 導入一次性導入所有組件:
Vite中的 import.meta.glob
和 import.meta.globEager
是兩個用于模塊映射和批量導入的方法。
這兩者與webpack
中的 require.context
功能相似,但更具靈活性,可以有效的實現在Vue中動態導入組件。
兩者的主要區別在于加載方式:import.meta.glob
是異步加載,返回的是一個包含路徑和返回Promise
的對象,需要在需要時調用;而 import.meta.globEager
是同步加載,返回的是一個包含路徑和模塊內容的對象,適合于模塊較少的情況。
兩者的基本用途都是批量導入模塊,不過import.meta.glob
返回的是一個由模塊路徑和模塊異步導入函數構成的鍵值對對象,而import.meta.globEager
返回的是一個由模塊路徑和模塊導出值構成的鍵值對對象。
首先,列出vite
中文檔對于這兩個函數的定義:
-
import.meta.glob
: 一個返回由Promise異步引入的鍵值對對象(相對于當前模塊的相對路徑 -> 該模塊的異步導入函數)。 -
import.meta.globEager
: 一個返回由同步引入的鍵值對對象(相對于當前模坐的相對路徑 -> 該模塊的導出對象)。
接下來,通過以下例子一一說明這兩者的應用場景和用法。
首先是 import.meta.glob
:
// 使用 import.meta.glob 導入所有 Vue 組件
let globModules= import.meta.glob('./components/*.vue')
console.log(globModules)
// 導入結果是一個對象,鍵為文件相對路徑,值為返回模塊Promise 的函數
// {
// './components/Foo.vue': () => Promise<{ default: object }>,
// './components/Bar.vue': () => Promise<{ default: object }>,
// './components/Baz.vue': () => Promise<{ default: object }>
// }
Object.entries(globModules).forEach(([path, globModule]) => {
console.log(path, globModule)
globModule().then((mod) => {
console.log(path + '模塊內容', mod.default)
})
})
// `import.meta.glob` 是異步加載,適合于模塊較多或者模塊較大的情況
// 當調用該函數并await得到的時候,會返回模塊的內容
接下來看 import.meta.globEager
:
// 使用 import.meta.globEager 同步導入所有 Vue 組件
let globModules= import.meta.globEager('./components/*.vue')
console.log(globModules)
// 導入結果是一個對象,鍵為文件相對路徑,值為模塊對象
// {
// './components/Foo.vue': {default: object},
// './components/Bar.vue': {default: object},
// './components/Baz.vue': {default: object}
// }
Object.entries(globModules).forEach(([path, globModule]) => {
console.log(path + '模塊內容', globModule.default)
})
// `import.meta.globEager` 是同步加載,適合于模塊較少或者模塊較小的情況
// 導入后可以直接獲取到模塊的內容
值得注意的是,對于Vue組件,模塊內容都是在default中,所以訪問時需要加上.default
。
其中import.meta.glob
可用于代碼分割或者基于用戶交互的延遲加載,而import.meta.globEager
適合于模塊較小,希望立即加載,并且不會由于尺寸過大而影響應用性能的情況。
使用 Vite 的 glob 導入,可以完成模塊引用的實時更新,以及開發服務器的熱更新。
注意事項:
- glob 導入只能在模塊頂級使用,并且無法在動態條件或嵌套作用域內部動態調用。
- import.meta.glob在生產環境構建時將被靜態地分析并構建成單獨的模塊。
- 引入的路徑必須是相對路徑(例如,import.meta.glob(‘./dir/.vue’)),不能是絕對路徑(例如,import.meta.glob('/dir/.vue’))。因為絕對路徑在不同的操作系統上的文件路徑可能不同。
原文鏈接:https://blog.csdn.net/jieyucx/article/details/131631436
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-05-24 C#中Dispose和Finalize方法使用介紹_C#教程
- 2023-11-21 linux sudo:/etc/sudoers 中第 11 行附近有解析錯誤 sudo:no val
- 2022-06-09 ASP.NET?Core基于現有數據庫創建EF模型_實用技巧
- 2022-10-17 docker網絡及部署集群和打包鏡像問題_docker
- 2022-11-09 關于Rust編譯時報link.exe?not?found錯誤問題_相關技巧
- 2022-06-17 Python實現一維插值方法的示例代碼_python
- 2023-10-30 解決docker拉取鏡像時報錯Error response from daemon: Get ““:
- 2022-07-12 Linux創建定時執行任務
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支