Vue系列-import動態引入的坑
最近在開發個人部落格,點選文章列表顯示相應md文章,效果如下:
其中遇到一個坑,我通過在後端請求md檔案的path,從而在前端展示markdown檔案,具體程式碼如下:
<!--前端展示md文章-->
<vue-markdown :key="key">{{msg}}</vue-markdown>
async getMd(){
//通過id獲取md檔案的path
await getArticleById(this.$route.params.id).then(res=>{
this.arName=res.name
})
//動態引入md文章,坑在下面這句!!!!!!
await import(this.arName).then(myModule => {
this.msg= myModule.default;
});
//強制重新渲染
this.key += 1
},
編譯的結果顯示如下:
WARNING Compiled with 1 warnings 09:01:31
warning in ./src/views/Article.vue?vue&type=script&lang=js&
Critical dependency: the request of a dependency is an expression
最後也得不到我要的效果,根據網友的提示,發現官方文件,發現有一個黃條提示
這個現象其實是與webpack import()的實現高度相關的。由於webpack需要將所有import()的模組都進行單獨打包,所以在工程打包階段,webpack會進行依賴收集。,webpack會找到所有import()的呼叫,將傳入的引數處理成一個正則,如:
import('./app'+path+'/util') => /^./app.*/util$/
也就是說,import引數中的所有變數,都會被替換為【.*】,而webpack就根據這個正則,查詢所有符合條件的包,將其作為package進行打包。如果我們直接傳入一個變數,webpack就會把 (整個電腦的包都打包進來[不鬧]) 認為你在逗他,並且丟擲一個WARNING: Critical dependency: the request of a dependency is an expression。
所以import的正確姿勢,應該是儘可能靜態化表達包所處的路徑,最小化變數控制的區域。
如我們要引用一堆頁面元件,可以使用import(’./pages/’+ComponentName),這樣就可以實現引用的封裝,同時也避免打包多餘的內容。於是果斷將我的程式碼進行了修改
於是得到想要的結果,原來import()動態載入的時候要注意這麼多,下次要注意了。
為了顯示 點選直接顯示文章,應對$route做監聽,具體的應用,見https://blog.csdn.net/ws6afa88/article/details/108652794,監聽方式如下:
watch:{
//監聽路由變化,路由變化由點選<router-link>造成
$route(to,from){
//顯示markdown檔案函式
this.getMd();
}
}
這裡作一個筆記,也希望其它遇到此問題的網友能夠及時修正。
相關文章
- 不再手寫import – VSCode自動引入Vue元件和Js模組ImportVSCodeVue元件JS
- Next.js踩坑入門系列(五)— 引入狀態管理reduxJSRedux
- vue 動態選單以及動態路由載入、重新整理採的坑Vue路由
- JS動態引入模組JS
- 少用@import引入CSS檔案ImportCSS
- import方法引入模組詳解Import
- 前端優化系列 – JS混淆引入效能天坑前端優化JS
- 前端優化系列 - JS混淆引入效能天坑前端優化JS
- Vite + Vue3 動態路由 - 踩坑記錄ViteVue路由
- vue系列之踩坑之旅Vue
- PE教程6: Import Table(引入表Import
- vue 填坑系列總結——scopedVue
- link和@import引入css 區別,不建議使用@importImportCSS
- vue專案中使用unicode引入iconfont,動態生成圖示的問題。VueUnicode
- vue2.0中引入wangEditor2步驟與坑Vue
- 【爬坑日記】vue中引入echarts,報錯ReferenceError: echarts is not definedVueEchartsError
- JavaScript動態更改引入樣式表JavaScript
- __import__ 與動態載入 python moduleImportPython
- vue 動態元件Vue元件
- springboot引入mybatis遇到的坑Spring BootMyBatis
- spring boot引入外部jar的坑Spring BootJAR
- arcgis js:動態引入js、css依賴JSCSS
- 【vue系列】當 element-ui 按需引入遇到 vue-router 路由懶載入VueUI路由
- Vue中引入jQuery兩種方式可在vue中引入jQueryVuejQuery
- 動態載入的一些坑
- 聊聊cglib動態代理遇到的坑CGLib
- <link>和@import url()引入外部css檔案的區別ImportCSS
- vue中引入echartsVueEcharts
- python中import的引用機制引起的坑PythonImport
- 1.vue的引入和vue環境的搭建Vue
- vue的Array坑Vue
- vue靜態資源打包中的坑與解決方案Vue
- 你真的理解@import和link引入樣式的區別嗎Import
- Vue管理系統前端系列二相關工具引入及封裝Vue前端封裝
- vue之神奇的動態按鈕Vue
- 聊聊 Vue 中 title 的動態修改Vue
- 排坑之旅——動態代理給Spring事務種下的坑Spring
- vue引入element-uiVueUI