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
)。我可以确认我这边不再需要上述修复。看来我的坏运气来自于在次要版本上推送的一些重大更改。
我正在使用 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
)。我可以确认我这边不再需要上述修复。看来我的坏运气来自于在次要版本上推送的一些重大更改。