dumi
dumi copied to clipboard
api.getRoutes() 报错
按照这个文档里的 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 (
Originally posted by @javaxiu in https://github.com/umijs/dumi/issues/842#issuecomment-999236650
最小复现 Demo
https://github.com/javaxiu/dumidoc
文档有误,插件函数体顶层代码执行时 Umi 的 Service 还未初始化好,可以将逻辑按需移入到某个 Umi 的插件的钩子里,例如构建完成时 onBuildComplete
:https://umijs.org/plugins/api#onbuildcomplete-err-stats-
确实在 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 事件好像也都是不合适的时机,请问有什么合适的时机可以改路由吗