刚开始使用webpack时,可能很多人都会有过这样的想法,在require文件时,能不能不写静态的字符串路径,而是使用一个更灵活的方式,比如定义一个变量,根据具体的运行情况来确定需要require哪个文件!
比如,笔者就遇到了一个这样的需求。
当时是使用vue-router开发一个管理系统,管理系统自身有一个目录数组,而vue-router也需要一个route配置数组,而这两者恰恰是对应关系的。当时就想,能不能只维护一个目录数组,然后动态的生成route数组呢?
于是我实现了一个小demo,如下:
// directory
let dir = [
{
name: 'a',
path: '/a',
componentPath: './a.vue'
},
{
...
}
];
let route = [];
for (let i = 0; i < dir.length; ++i) {
let item = dir[i];
route.push({
path: item.path,
component: r => require.ensure([], () => r(require(item.componentPath)), 'demo')
});
}
大致如上,当时没留源码,大概手写个例子,忽略一些可能的语法错误。
当使用这段代码运行的时候,就开始报错了: