react+vite動態(tài)導(dǎo)入報錯@vite-ignore的問題及解決
正常的動態(tài)組件導(dǎo)入方式
webpack搭建的項目,不管是react還是vue通常引入動態(tài)組件基本這么寫:
const url = import(`../pages/${locale}`) // vite不支持or
const url = import(`../pages/${locale}/index.jsx`) // vite不支持這在vite架構(gòu)中,一般情況下開發(fā)不會有問題,但是使用build打包就會給出警告提示。
錯誤信息:
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/pages/home/index.jsx
解決方案
這個需要熟讀vite官網(wǎng)教程了:https://cn.vitejs.dev/guide/features.html#glob-import

用法:
const modules = import.meta.glob('./dir/*.js')
// vite 生成的代碼
const modules = {
'./dir/foo.js': () => import('./dir/foo.js'),
'./dir/bar.js': () => import('./dir/bar.js')
}
import.meta.glob() 方法匹配某個菜單下的所有模塊,所以你還需要進行遍歷。
例如:
我用react寫的話,因為會有index.jsx的原因:
import.meta.glob('@/pages/*/*') 會匹配pages下的所有一級目錄
import.meta.glob('@/pages/*/*/*') 會匹配pages下的所有二級目錄
…以此類推
Glob 導(dǎo)入注意事項
這只是一個 Vite 獨有的功能而不是一個 Web 或 ES 標(biāo)準(zhǔn) 該 Glob 模式會被當(dāng)成導(dǎo)入標(biāo)識符:必須是相對路徑(以 ./開頭)或絕對路徑(以 / 開頭,相對于項目根目錄解析)或一個別名路徑(請看 resolve.alias 選項)。
Glob 匹配是使用fast-glob 來實現(xiàn)的 —— 閱讀它的文檔來查閱 支持的 Glob 模式。
你還需注意,所有 import.meta.glob的參數(shù)都必須以字面量傳入。你 不 可以在其中使用變量或表達式。
目錄結(jié)構(gòu)

封裝動態(tài)方法
// locale為路徑名稱 例如:dashboard/analysis
function importLocale(locale) {
// 判斷 / 出現(xiàn)次數(shù) 用于匹配菜單組件 (pages目錄下)
let n = (locale.split('/')).length - 1;
// vite動態(tài)導(dǎo)入方法
let modules = import.meta.glob('@/pages/*/*')
// 組件層級 0一級 ,1二級,2三級,3四級,4五級
// pages下一級目錄:commonview/index.jsx login/index.jsx等等
// pages下二級目錄:dashboard/analysis/index.jsx system/user/index.jsx等等
switch (n) {
case 0:
modules = import.meta.glob('@/pages/*/*')
break;
case 1:
modules = import.meta.glob('@/pages/*/*/*')
break;
case 2:
modules = import.meta.glob('@/pages/*/*/*/*')
break;
case 3:
modules = import.meta.glob('@/pages/*/*/*/*/*')
break;
case 4:
modules = import.meta.glob('@/pages/*/*/*/*/*/*')
//最多給你5級菜單目錄,多了自己加。注意是菜單組件目錄不是普通組件,我覺得沒哪個傻逼會寫好幾級目錄,菜單是系統(tǒng)設(shè)置-菜單管理里面添加的,注意下就行。
break;
default:
break;
}
let url = modules[`/src/pages/${locale}/index.jsx`]
// 找不到本地組件直接403
if (url == undefined) url = () => import(`../components/error403`)
// const url = import(`../pages/${locale}`) // vite不支持
return url
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談vue.js導(dǎo)入css庫(elementUi)的方法
下面小編就為大家分享一篇淺談vue.js導(dǎo)入css庫(elementUi)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
關(guān)于Vue開發(fā)中v-if和v-show的聯(lián)合使用步驟
本文探討了在Vue.js項目中如何有效利用v-if和v-show指令來實現(xiàn)多步驟表單導(dǎo)航,確保用戶操作數(shù)據(jù)能在前后步驟間保持不變,通過具體案例分析了這兩種指令的特點及結(jié)合使用的最佳實踐,感興趣的朋友跟隨小編一起看看吧2025-09-09
element-ui el-select下拉框el-date-picker彈出框定位問題解決方案(推薦)
項目開發(fā)過程中發(fā)現(xiàn)el-select和el-date-picker彈出框顯示時候,滾動屏幕,導(dǎo)致彈出框定位出現(xiàn)問題,這篇文章主要介紹了element-ui el-select下拉框el-date-picker彈出框定位問題解決方案(推薦),需要的朋友可以參考下2024-07-07

