code: function renderRouterStructure(virtualFolder) {
          if (!Array.isArray(virtualFolder)) {
              throw new TypeError('The virtualFolder should be a array');
          }
  
          return virtualFolder.map(virtualChild => {
              const router = {};
  
              const path = _.isString(virtualChild) ?
                  // 普通路由
                  virtualChild :
                  // 父路由
                  virtualChild.path;
  
              const relativePageDirPath = Path.relative(pageDirPath, path).replace(/\\/g, '/');
  
              router.path = Config.path({relativePageDirPath});
              router.componentPath = Config.componentPath({routerIndexPath, path});
              router.componentPkg = Config.componentPkg({relativePageDirPath}) || '$base';
  
              // 普通路由
              if (_.isString(virtualChild)) {
                  router.name = Config.name({relativePageDirPath});
              } else {
                  router.children = renderRouterStructure(virtualChild.child);
                  router.componentPath =
                      Path.join(router.componentPath, 'layout', 'layout.vue').replace(/\\/g, '/');
              }
  
              if (loadRouterHook) {
                  loadRouterHook(router);
              }
  
              return router;
          });
      }
docs: 根据虚拟的文件结构,渲染成一个路由结构。
  每个非父路由都有path,name,componentPath,componentPkg
  父路由有:path,componentPath,componentPkg,children