带有 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:无法解决反应的主要内容,如果未能解决你的问题,请参考以下文章

带有 nextjs 的 material-ui 选项卡?

无法导出带有 getServerSideProps 的 nextjs 页面

在带有 sass、css 和语义 ui 的 nextjs 中使用谷歌字体

带有 NextJS 的打字稿

暗模式在带有 Nextjs 和 Typescript 的 Tailwind CSS V3 中不起作用

nextjs + react-native-web + styled-components :warnOnce