dumi icon indicating copy to clipboard operation
dumi copied to clipboard

api.getRoutes() 报错

Open javaxiu opened this issue 3 years ago • 2 comments

按照这个文档里的 demo 写的,结果报错了

// /path/to/plugin.ts
import { IApi } from 'dumi';

export default async (api: IApi) => {
  const rootRoute = await api.applyPlugins({
    key: 'dumi.getRootRoute',
    type: api.ApplyPluginsType.modify,
    initialValue: await api.getRoutes(),
  });
};

Browserslist: caniuse-lite is outdated. Please run: npx browserslist@latest --update-db

Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating Cannot read properties of null (reading 'routes') TypeError: Cannot read properties of null (reading 'routes') at /Users/u/workspace/wec/node_modules/@umijs/core/lib/Route/Route.js:88:53 at Generator.next () at asyncGeneratorStep (/Users/u/workspace/wec


Originally posted by @javaxiu in https://github.com/umijs/dumi/issues/842#issuecomment-999236650

最小复现 Demo

https://github.com/javaxiu/dumidoc

javaxiu avatar Dec 22 '21 08:12 javaxiu

文档有误,插件函数体顶层代码执行时 Umi 的 Service 还未初始化好,可以将逻辑按需移入到某个 Umi 的插件的钩子里,例如构建完成时 onBuildComplete:https://umijs.org/plugins/api#onbuildcomplete-err-stats-

PeachScript avatar Dec 22 '21 08:12 PeachScript

确实在 onDevBuildComplete 里可以正确获取到。 我想实现的效果是根据文件目录约定来自动填写路由,免去在每个 markdown 头部写 path title 的麻烦。

尝试了如下方法修改,

  api.onDevCompileDone(async () => {
    const routes = await api.getRoutes();
    routes.find(v => v.path === '/').routes.push({
      ....try to add some new
    })
    const final = await api.applyPlugins({
      key: 'dumi.getRootRoute',
      type: api.ApplyPluginsType.modify,
      initialValue: routes,
    });
    console.log('#####', routes)
    console.log('@@@@', final);
  })

但是试了一下,onDevBuildComplete 的时候改来不及了,其他 umi 事件好像也都是不合适的时机,请问有什么合适的时机可以改路由吗

javaxiu avatar Dec 22 '21 10:12 javaxiu