没有提供任何代码很难给出正确的解决方案,但我会尝试
使用这样的代码:
// route definition loaded from json
const routeDef = [
{ name: 'about', path: '/about', componentName: 'about' },
{ name: 'profile', path: '/profile', componentName: 'profile' }
]
// we can create routes like this
const routes = routeDef.map(function(def) {
return {
name: def.name,
path: def.path,
component: () => import('@/views/' + def.componentName + '.vue')
}
})
const router = new VueRouter({
routes: routes
})
通过使用import('@/views/' + def.componentName + '.vue'),你告诉Webpack 我想导入views 目录中的.vue 文件之一,但在运行时会知道哪个文件。因此,Webpack 会将所有文件捆绑在该目录中,并使其在运行时可用于导入......
请注意,您传递给import() 的内容非常重要 - 部分参数必须始终是静态字符串,因此 Webpack 至少对目录有一些线索(import(def.componentName) 不会工作) - 请参阅docs
附加示例 - 在运行时从服务器加载路由定义
router.js
export default createRouter() {
return axios.get('/getRouteDefinitions').then(function(data) {
const routes = data.routeDef.map(function(def) {
return {
name: def.name,
path: def.path,
component: () => import('@/views/' + def.componentName + '.vue')
}
})
return new VueRouter({
routes: routes
})
})
}
main.js
import VueRouter from `VueRouter`
import createRouter from `router.js`
Vue.use(VueRouter)
createRouter().then(function(router) {
const app = new Vue({
router
})
app.$mount("#app")
})