无法解析模块“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”的主要内容,如果未能解决你的问题,请参考以下文章

未找到模块:无法解析“

找不到模块:错误:无法解析模块“路由”

Webpack:无法解析模块“文件加载器”

React 无法编译模块未找到:无法在listingDetail 上解析

找不到模块:无法解析“firebase”

无法解析模块 ./zlib_bindings