You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native升级后无法解析http模块问题求助

React Native升级后无法解析http模块的问题

将React Native升级至0.72.1,并把Node版本从16.4.3切换到18.16.1后,出现无法解析http模块的错误。错误提示@smithy/node-http-handler模块中找不到http模块,已尝试清除缓存、重新安装node_modules和pods,但问题未解决,寻求可行方案。

错误日志详情

error: Error: Unable to resolve module http from /Users/toms/Documents/VolleyballApp/volleyball/node_modules/@smithy/node-http-handler/dist-cjs/node-http-handler.js: http could not be found within the project or in these directories:
  node_modules
  ../../../node_modules
  2 | Object.defineProperty(exports, "__esModule", { value: true });
  3 | exports.NodeHttpHandler = exports.DEFAULT_REQUEST_TIMEOUT = void 0;
> 4 | const protocol_http_1 = require("@smithy/protocol-http");
    |                                                   ^
  5 | const querystring_builder_1 = require("@smithy/querystring-builder");
  6 | const http_1 = require("http");
  7 | const https_1 = require("https");
    at ModuleResolver.resolveDependency (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/node-haste/DependencyGraph/ModuleResolution.js:139:15)
    at DependencyGraph.resolveDependency (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/node-haste/DependencyGraph.js:277:43)
    at Object.resolve (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/lib/transformHelpers.js:169:21)
    at Graph._resolveDependencies (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/DeltaBundler/Graph.js:472:35)
    at Graph._processModule (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/DeltaBundler/Graph.js:260:38)
    at async Graph._addDependency (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/DeltaBundler/Graph.js:371:20)
    at async Promise.all (index 1)
    at async Graph._processModule (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/DeltaBundler/Graph.js:321:5)
    at async Graph._addDependency (/Users/toms/Documents/VolleyballApp/volleyball/node_modules/react-native/node_modules/metro/src/DeltaBundler/Graph.js:371:20)
    at async Promise.all (index 2)

当前环境

  • react-native版本: 0.72.1
  • Node版本: 18.16.1

可行解决办法

1. 配置Metro解析Node核心模块

在项目根目录的metro.config.js中添加核心模块映射:

const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');

module.exports = mergeConfig(getDefaultConfig(__dirname), {
  resolver: {
    extraNodeModules: {
      http: require.resolve('react-native-http'),
      https: require.resolve('react-native-https'),
    },
  },
});

安装对应依赖:

npm install react-native-http react-native-https --save

2. 替换为React Native兼容的HTTP Handler

@smithy/node-http-handler是Node.js环境专用模块,改用AWS提供的React Native适配版本:

npm uninstall @smithy/node-http-handler
npm install @aws-sdk/react-native-http-handler --save

在代码中替换导入:

// 原导入
// const { NodeHttpHandler } = require("@smithy/node-http-handler");
// 替换为
const { ReactNativeHttpHandler } = require("@aws-sdk/react-native-http-handler");

3. 调整@smithy包版本

查看@smithy/node-http-handler的版本兼容说明,降级到与React Native 0.72.1适配的版本,或者检查是否有官方提供的React Native适配方案。

4. 彻底清理缓存并重启服务

执行以下命令完成全量清理:

npx react-native start --reset-cache
rm -rf node_modules && npm install
cd ios && pod install && cd ..

内容的提问来源于stack exchange,提问作者tomstan11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 21:20:39