當需要使用后端數據來生成動態路由是遇到一個問題:
component:() =>import('@/xxx')
能夠正常路由,改為變量形式
component :() => import('@/views/' + path + '.vue')
點擊菜單路由視圖并不加載,報錯
Cannot find module
出現這個問題原因:
webpack
編譯es6
動態引入 import()
時不能傳入變量,例如
dir ='path/to/my/file.js';
import(dir)
報錯:Cannot find module
而要傳入字符串
import('path/to/my/file.js')
這是因為webpack
的現在的實現方式不能實現完全動態。
但一定要用變量的時候,可以通過字符串模板來提供部分信息給webpack
;例如import(./path/${myFile})
(這種方式我使用vue2.6之后的版本好像就不能用了), 這樣編譯時會編譯所有./path
下的模塊,但運行時確定myFile
的值才會加載,從而實現懶加載。
解決方法:
將
component = import('@/views/' + path + '.vue')
替換為:
// resolve不能省略
component = resolve => require([`@/views/${path}.vue`], resolve)