带有 Nextjs 和 React-native 的 monorepo 中的 Nohoist:无法解决反应
Posted
技术标签:
【中文标题】带有 Nextjs 和 React-native 的 monorepo 中的 Nohoist:无法解决反应【英文标题】:Nohoist in a monorepo with Nextjs and React-native: unable to resolve react 【发布时间】:2021-09-10 21:59:00 【问题描述】:我正在从事的项目由一个包含 react-native 应用程序(特别是 expo)和 NestJS 服务器的 monorepo(使用 yarn)组成。今天我需要将 NestJS 与 NextJS 集成,并遇到错误“只能在函数组件的主体内调用 Hooks”。这是因为服务器(使用 NextJs)和移动应用程序(使用 React-Native)都需要 react 模块,但版本不同。 我通过在 monorepo 根目录的 packages.json 文件中添加 nohosit 选项来解决它:
"nohoist": [
"**/react", "**/react/**",
"**/react-dom", "**/react-dom/**"
]
但是,尽管这解决了服务器(NestJS 和 NextJS)的问题,但它使用 react-native 应用程序创建了一个新的问题,该应用程序找不到 react 模块:
Unable to resolve module react from [myDir]\node_modules\@react-native-community\netinfo\src\index.ts: react could not be found within the project.
If you are sure the module exists, try these steps:
1. Clear watchman watches: watchman watch-del-all
2. Delete node_modules and run yarn install
3. Reset Metro's cache: yarn start --reset-cache
4. Remove the cache: rm -rf /tmp/metro-*
我目前无权共享存储库,但当然,如果需要更多信息,我会立即提供
【问题讨论】:
【参考方案1】:目前,我已经通过追溯我的步骤解决了这个问题。也就是说,我从 nohoist 中删除了 react 并通过在根 package.json 中添加以下代码来解决重复的 react 模块问题:
"resolutions":
"react": "^17.0.2",
"react-dom": "^17.0.2"
但是,我不相信这是最好的解决方案,并且将来不会给我带来问题。
【讨论】:
以上是关于带有 Nextjs 和 React-native 的 monorepo 中的 Nohoist:无法解决反应的主要内容,如果未能解决你的问题,请参考以下文章
无法导出带有 getServerSideProps 的 nextjs 页面
在带有 sass、css 和语义 ui 的 nextjs 中使用谷歌字体