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 標準 該 Glob 模式會被當(dāng)成導(dǎ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)文章
如何使用electron將vue項目打包成.exe文件(保姆級教程)
本文給大家介紹如何使用electron將vue項目打包成.exe文件,大家要注意一下vue2項目,使用的vue-element-admin框架,用electron打包成.exe文件,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2024-03-03vue-cli3.0實現(xiàn)一個多頁面應(yīng)用的歷奇經(jīng)歷記錄總結(jié)
這篇文章主要介紹了vue-cli3.0實現(xiàn)一個多頁面應(yīng)用的歷奇經(jīng)歷,總結(jié)分析了vue-cli3.0實現(xiàn)一個多頁面應(yīng)用遇到的問題與相關(guān)操作注意事項,需要的朋友可以參考下2020-03-03vue?codemirror實現(xiàn)在線代碼編譯器效果
這篇文章主要介紹了vue-codemirror實現(xiàn)在線代碼編譯器?,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12vue父組件監(jiān)聽子組件數(shù)據(jù)更新方式(hook)
這篇文章主要介紹了vue父組件監(jiān)聽子組件數(shù)據(jù)更新方式(hook),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08