无法解析模块“metro/src/lib/bundle-modules/HMRClient”
Posted
技术标签:
【中文标题】无法解析模块“metro/src/lib/bundle-modules/HMRClient”【英文标题】:Unable to resolve module `metro/src/lib/bundle-modules/HMRClient` 【发布时间】:2019-06-26 03:36:30 【问题描述】:我刚刚从 RN 0.55.4 升级到 0.59.3 .....现在我收到以下错误:
错误:无法从 ....\node_modules\react-native\Libraries\Utilities\HMRClient.js 解析模块 metro/src/lib/bundle-modules/HMRClient:模块 metro/src/lib/bundle-modules /HMRClient 在 Haste 模块地图中不存在
HMRClient.js 文件确实包含以下要求语句:const MetroHMRClient = require('metro/src/lib/bundle-modules/HMRClient');
.....而且我无法在任何地方看到以“metro”开头的路径,所以我想我需要以某种方式添加它。还有另外一条 require 语句如下:const invariant = require('invariant');
....no file name 'invariant' exists either.
Facebook 说这已在 0.53.0 master 中修复,但看起来像它的背面 https://github.com/facebook/react-native/issues/17742
下面是我的 package.json
"name": "xs",
"version": "0.0.1",
"private": true,
"scripts":
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest",
"flow": "flow",
"flow start": "flow start",
"flow stop": "flow stop",
"flow status": "flow status",
"flow coverage": "flow coverage"
,
"dependencies":
"firebase": "^5.11.1",
"flow": "^0.2.3",
"flow-bin": "^0.65.0",
"prop-types": "^15.6.1",
"react": "16.8.3",
"react-native": "0.59.3",
"react-native-elements": "^0.19.0",
"react-native-google-places-autocomplete": "^1.3.9",
"react-native-maps": "git://github.com/react-native-community/react-native-maps.git#master",
"react-native-switch": "^1.4.0",
"react-native-vector-icons": "^4.5.0",
"react-navigation": "^2.5.5",
"react-redux": "^5.1.0",
"redux": "^4.0.1",
"redux-thunk": "^2.3.0"
,
"devDependencies":
"babel-eslint": "^8.2.6",
"babel-preset-flow": "^6.23.0",
"eslint": "^4.9.0",
"eslint-config-airbnb": "^16.1.0",
"eslint-plugin-import": "^2.17.3",
"eslint-plugin-jsx-a11y": "^6.2.1",
"eslint-plugin-react": "^7.13.0",
"prettier-eslint": "^8.8.2",
"@babel/core": "^7.4.3",
"@babel/runtime": "^7.4.3",
"babel-jest": "^24.7.1",
"jest": "^24.7.1",
"metro-react-native-babel-preset": "^0.53.1",
"react-test-renderer": "16.8.3"
,
"jest":
"preset": "react-native"
请帮忙!
附言以下建议不起作用
要解决,请尝试以下操作:
1.清除守望者手表:watchman watch-del-all
。
2、删除node_modules
文件夹:rm -rf node_modules && npm install
。
3. 重置 Metro Bundler 缓存:rm -rf /tmp/metro-bundler-cache-*
或 npm start -- --reset-cache
。
4. 移除急速缓存:rm -rf /tmp/haste-map-react-native-packager-*
.
【问题讨论】:
你能去你的node modules
文件夹检查HMRClient.js
是否真的存在于上述目录中吗?
是的,肯定有
【参考方案1】:
在运行npm install
时注意看是否需要某个特定版本的东西。
首先检查 babel 配置文件,如果它不起作用,请尝试 package.json
中的更改。
尝试如下配置文件和部门。 这是一个对我有用的配置,用于从 0.54 到 0.59.5 的更新:
package.json:
" dependencies":
"react": "16.8.3",
"react-native": "0.59.5",
// ...
,
"devDependencies":
"@babel/core": "^7.0.0-0",
"babel-core": "^7.0.0-bridge.0",
"metro-react-native-babel-preset": "0.53.0",
"react-test-renderer": "16.6.3",
// ...
babel.config.js:
module.exports =
presets: ['module:metro-react-native-babel-preset'],
;
.babelrc:
"presets": ["module:metro-react-native-babel-preset"]
我可以在 RN 发行说明中找到关于 babel 和 Metro 更改的唯一有用信息是在 [0.57] 此处:
https://github.com/react-native-community/releases/blob/master/CHANGELOG.md
更新说明:
尝试将配置文件作为来自新工作项目(使用 0.59.9 创建)的配置文件似乎不适用于从 0.54 到 0.59 的更新
babel.config.js:
module.exports =
presets: ['module:metro-react-native-babel-preset'],
;
metro.config.js:
module.exports =
transformer:
getTransformOptions: async () => (
transform:
experimentalImportSupport: false,
inlineRequires: false,
,
),
,
;
并且没有.babelrc
文件。
package.json:
"devDependencies":
"@babel/core": "^7.4.5",
"@babel/runtime": "^7.4.5",
"metro-react-native-babel-preset": "^0.54.1",
,
【讨论】:
试过选项 1 没用.....试过选项 2 没用....然后升级到 0.59.5 以匹配你的,它工作!太高兴了……非常感谢。如果您给我您的电子邮件地址,我可以将钱与您联系 我很高兴它成功了。你不用寄钱给我。你可以用 20 美元来庆祝你解决了问题 ;) 在我看来,升级 RN 仍然需要勇气和耐心 :) 。恭喜你没有放弃! @jamesmurphy 我根据您的反馈更新了我的答案 这解决了我的问题(世博项目):github.com/react-native-community/cli/issues/540以上是关于无法解析模块“metro/src/lib/bundle-modules/HMRClient”的主要内容,如果未能解决你的问题,请参考以下文章