實現(xiàn)根據(jù)文件目錄自動生成路由(新增頁面免修改router/index.js)

可以采用webpack里的require.context(directory,includeSubdirs,filter,mode)方法 https://webpack.js.org/api/module-methods/#requirecontext,來實現(xiàn):

image.png
這里有個要注意的地方就是默認require.context采用的是同步的方式,如果想用異步的方式記得在第四個參數(shù)中傳遞lazy實現(xiàn)異步懶加載;其支持keys、resolve及id 參數(shù):https://webpack.docschina.org/guides/dependency-management/#context-module-api
image.png

// 懶加載
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];
    // 文件名尾部有數(shù)值的情況下 自動注入路由
    // 尾部數(shù)值為1表示超管權(quán)限 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)
    // 一、懶加載的實現(xiàn)
    // routerObj.component = () => requireAllVueComponents(allVueComponentItem)
    routerObj.component = () => requireAllVueComponents(allVueComponentItem).default || requireAllVueComponents(allVueComponentItem)


    // 二、非懶加載--同步的實現(xiàn)
    // routerObj.component = requireAllVueComponents(allVueComponentItem).default || requireAllVueComponents(allVueComponentItem)

    routerList.push(routerObj)
  }
})


再將routerList 放置在routes里即可

const router = new Router({
  routes: [...routerList]
})

另一個用途:
https://cn.vuejs.org/v2/guide/components-registration.html#%E5%9F%BA%E7%A1%80%E7%BB%84%E4%BB%B6%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8C%96%E5%85%A8%E5%B1%80%E6%B3%A8%E5%86%8C

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容