可以采用webpack里的require.context(directory,includeSubdirs,filter,mode)方法 https://webpack.js.org/api/module-methods/#requirecontext,来实现:
// 懒加载
const requireAllVueComponents = require.context('../components/autoRouter', true, /\.vue$/, 'lazy');
// 非懒加载
// const requireAllVueComponents = require.context('../components/autoRouter', true, /\.vue$/);
const routerList = [];
requireAllVueComponents.keys().forEach((allVueComponentItem) => {
// console.log(allVueComponentItem, 'allVueComponentItem')
// (function (allVueComponentItem) {
const completeName = allVueComponentItem.match(/\w+\.vue$/, '')[0];
// 文件名尾部有数值的情况下 自动注入路由
// 尾部数值为1表示超管权限 2表示管理员 3 表示普通用户
if (completeName.match(/\d\.vue$/g)) {
const routerObj = {};
let permissionNum = 0;
routerObj.path = allVueComponentItem.replace(/\./, 'autoRouter').replace(/\d\.vue$/, '/:id')
routerObj.name = completeName.replace(/\d\.vue$/, '');
// console.error('allVueComponentItem.replace(/\\.\\//, \'../components/点点滴滴/\')', allVueComponentItem.replace(/\.\//, '../components/autoRouter/').replace(/\.vue$/, ''))
// const componentName = allVueComponentItem.replace(/\.\//, '../components/autoRouter/').replace(/\.vue$/, '');
// console.error('componentName', componentName)
// routerObj.allVueComponentItem = allVueComponentItem
// console.error('completeName', completeName)
// 一、懒加载的实现
// routerObj.component = () => requireAllVueComponents(allVueComponentItem)
routerObj.component = () => requireAllVueComponents(allVueComponentItem).default || requireAllVueComponents(allVueComponentItem)
// 二、非懒加载--同步的实现
// routerObj.component = requireAllVueComponents(allVueComponentItem).default || requireAllVueComponents(allVueComponentItem)
routerList.push(routerObj)
}
})
再将routerList 放置在routes里即可
const router = new Router({
routes: [...routerList]
})