dva -react TypeError: root.findRouters(...).getRouterInfo is not a function

来源:互联网 发布:2015年网络零售总额 编辑:程序博客网 时间:2024/05/26 09:57


dva -react 入门 

异常修改, 抛异常

C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\bin\dva-generate      create  routeComponent src/routes/Users.js, src/routes/Users.cssTypeError: root.findRouters(...).getRouterInfo is not a function    at transform (C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\transform.js:42:32)    at exports.default (C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\node_modules\dva-ast\lib\api\index.js:46:36)    at C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\lib\generate.js:92:27    at generate (C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\lib\generate.js:108:11)    at Object.<anonymous> (C:\Users\thinkpad\AppData\Roaming\npm\node_modules\dva-cli\bin\dva-generate:11:27)    at Module._compile (module.js:570:32)    at Object.Module._extensions..js (module.js:579:10)    at Module.load (module.js:487:32)    at tryModuleLoad (module.js:446:12)    at Function.Module._load (module.js:438:3)


解决方法如下:

wenris commented 14 days ago • edited

这个 bug 让我怀疑自己人生。问题的根源是,我们安装的 dva-cli > dva-ast > jscodeshift 的版本不对!

dva-ast 中使用了下面的代码:

Collection.fromPaths([], this);

Collection 是 jscodeshift 库提供的,dva-ast 的 package.json 指定 "jscodeshift": "^0.3.28" ,但 jscodeshift 最新版本是 0.3.32 ,这里 Bug 就出现了。

虽然我发现了问题根源,但 dva-ast 和 jscodeshift 这两个库的源代码看得我云里雾里,望而生畏,杀虫的工作还是等高手吧。

我目前的解决方法是,将全局安装的 jscodeshift 回滚至 0.3.28 ,初入江湖的我,人生还可以继续么?

Roll your global package jscodeshift back to v0.3.28 .

 wenris referenced this issue in dvajs/dva-ast 14 days ago

 Open

TypeError: root.findRouters(...).getRouterInfo is not a function #39


wenris commented 14 days ago • edited

已经在 dva-ast 打了臭虫报告,应该很快可以修复的。

dvajs/dva-ast#39

我已经找出 Bug 了,原因是 dva-ast 引用了 jscodeshift 的 Collection ,在 jscodeshift 新版本中这个 Collection 的位置发生了变化,从 'jscodeshift/dist/Collection'; 变为了 'jscodeshift/src/Collection'; 。

如果不想回滚 jscodeshift ,可以直接修改 dva-ast 的文件,将下面文件中的 'jscodeshift/dist/Collection'; 改为 'jscodeshift/src/Collection'; 即可:

  1. dva-ast/lib/collections/Entry.js
  2. dva-ast/lib/collections/RouteComponent.js
  3. dva-ast/lib/collections/Router.js


原创粉丝点击