Metro Bundler 在尝试从 redux-toolkit 解析模块“immer”时失败

Metro Bundler fails while trying to resolve module `immer` from redux-toolkit

我正在使用 Expo 和 Expo Go 构建一个 React 本机应用程序,以便在 android 设备上对其进行测试。直到今天,它一直在完美运行。我在我的一个组件上遇到了一个错误,出现了这种错误:

Attempt to invoke virtual method 'android.graphics.drawable.Drawable android.graphics.drawable.Drawable$ConstantState.newDrawable(android.content.res.Resources)' on a null object reference

在我看来,解决方案是清除缓存 yarn cache clean。我还清除了 Expo Go 应用程序上的缓存。但这导致我 Metro Bundler 失败并出现此错误:

Android Bundling failed 1279ms
While trying to resolve module `immer` from file `H:\my_project\app\node_modules\@reduxjs\toolkit\dist\redux-toolkit.cjs.production.min.js`, the package `H:\my_project\app\node_modules\immer\package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`H:\my_project\app\node_modules\immer\dist\immer.esm.mjs`. Indeed, none of these files exist:

  * H:\my_project\app\node_modules\immer\dist\immer.esm.mjs(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
  * H:\my_project\app\node_modules\immer\dist\immer.esm.mjs\index(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)

检查 H:\my_project\app\node_modules\immer\dist\ 时,我确实找到了一个 immer.esm.mjs 文件,但没有 H:\my_project\app\node_modules\immer\dist\immer.esm.mjs\ 文件夹,其中有一个 index 文件。

所以我尝试手动删除 node_modules/ 并使用 yarn 重新安装软件包,重新启动 Expo 服务器,在重新启动我的机器后执行所有这些操作,甚至 运行 expo upgrade , 删除了 .expo/, 删除了 yarn.lock, 但我一直收到同样的错误。

这让我很困惑。感谢您就如何操作提出建议。


这里是我的 package.json:

中使用的依赖版本
"@reduxjs/toolkit": "^1.8.1",
"@types/react-redux": "^7.1.22",
"expo": "~45.0.0",
"react": "17.0.2",
"react-native": "0.68.2",
"react-redux": "8.0.1",
"redux": "4.2.0"

修复

this redux-toolkit issue 中所建议,immer 版本 9.0.13 似乎存在问题。临时修复建议对我有用,将 immer@9.0.12 添加到我在 packages.json:

中的决议
  "resolutions": {
    "immer": "9.0.12"
  }

更新

PR on immer 解决了这个问题 (9.0.14)。我可以确认我这边不再需要上述修复。看来我的坏运气来自于在次要版本上推送的一些重大更改。