react-router 无法解析模块历史,缺少 lib 文件夹

Posted

技术标签:

【中文标题】react-router 无法解析模块历史,缺少 lib 文件夹【英文标题】:react-router cannot resolve module history, missing lib folder 【发布时间】:2017-03-21 21:41:52 【问题描述】:

我正在创建一个新的 React 项目,但在 react-routerhistory 之间存在依赖问题:

ERROR in ./~/react-router/lib/match.js
Module not found: Error: Cannot resolve module 'history/lib/Actions' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/match.js 15:15-45

ERROR in ./~/react-router/lib/useRouterHistory.js
Module not found: Error: Cannot resolve module 'history/lib/useQueries' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/useRouterHistory.js 6:18-51

ERROR in ./~/react-router/lib/createMemoryHistory.js
Module not found: Error: Cannot resolve module 'history/lib/useQueries' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/createMemoryHistory.js 6:18-51

ERROR in ./~/react-router/lib/useRouterHistory.js
Module not found: Error: Cannot resolve module 'history/lib/useBasename' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/useRouterHistory.js 10:19-53

ERROR in ./~/react-router/lib/createMemoryHistory.js
Module not found: Error: Cannot resolve module 'history/lib/useBasename' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/createMemoryHistory.js 10:19-53

ERROR in ./~/react-router/lib/browserHistory.js
Module not found: Error: Cannot resolve module 'history/lib/createBrowserHistory' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/browserHistory.js 5:28-71

ERROR in ./~/react-router/lib/hashHistory.js
Module not found: Error: Cannot resolve module 'history/lib/createHashHistory' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/hashHistory.js 5:25-65

ERROR in ./~/react-router/lib/createMemoryHistory.js
Module not found: Error: Cannot resolve module 'history/lib/createMemoryHistory' in /app/node_modules/react-router/lib
@ ./~/react-router/lib/createMemoryHistory.js 14:27-69

我正在使用 react-router 最新版本 3.0.0,它在其 package.json 中具有 history 3.0.0 作为依赖项。 我正在使用npm 版本3.10.8,即使history 模块是由react-router 依赖安装的,我也将它添加到我的package.json 中,如react-router 文档中所述。

事情是react-routerhistory/lib/ 中搜索它的需求,而history 模块在history/ 中有它的文件(没有lib 文件夹)。

由于它不依赖于我的配置/安装,而是依赖于第三方模块,我不知道该怎么做,我很惊讶没有发现任何与此相关的问题。

【问题讨论】:

可以尝试删除node_modules文件夹,然后运行npm install。 @ShubhamKhatri 已经尝试了所有基本的东西,例如清理、重新安装等。没有任何改进,历史模块没有任何我尝试过的 lib 文件夹 【参考方案1】:

问题其实是按照react-router安装说明,在我们自己的package.json中添加history模块。

自行安装history 的最新版本而不是react-router 所需的版本会造成此冲突。

对于react-router >= 3.0,history 是具有固定版本要求的依赖项,与react-router 本身一起安装:

└─┬ react-router@3.0.0
  └── history@3.2.1

无需在package.json 中手动安装,如果您没有指定正确的所需版本,则会产生冲突。

感谢@ShubhamKhatri 为我指明了这个方向。

【讨论】:

是的,你说得对。当我将历史记录升级到最新版本时,它发生在我身上。我必须将其降级为 history@3.2.1 才能修复它。似乎“lib”目录在 3.2.1 之后被删除了【参考方案2】:

如果您使用的 npm 版本高于 3.0.0 。

请注意,您还需要安装 history 软件包,因为它是 React Router 的对等依赖项,并且不会在低于 3.0.0 的 npm 版本中自动为您安装。

运行npm install history,你应该会很好。

【讨论】:

我已经知道了,我在 package.json 中添加了history。无论如何,该模块存在,这不是这里的问题,问题是react-router 在调用history 库时引用了错误的路径 答案实际上是完全相反的,但是感谢您,我进一步调查了模块版本和要求并找到了解决方案【参考方案3】:

路径需要更新它不再是

历史/lib/createHashHistory

只是

历史/createHashHistory

React Training Link

也可能从 react-route-dom 导入 HashRouter。 HashRouter 取代了 Router,不再需要将 history 作为 prop 传递。

【讨论】:

以上是关于react-router 无法解析模块历史,缺少 lib 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

找不到模块:错误:无法解析模块“路由”

react-router 和 typescript 抛出“无法解析 'react-router-dom'”错误

无法解析模块“反应”的路径。 (导入/未解决)

[react-router] React-Router怎么获取历史对象?

react-router,道具“历史”未定义

React-router:更改 URL 并清除历史记录