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

Node环境on-finished/raw-body报async_hooks找不到警告的解决求助

问题分析与解决方案

为什么会出现这个警告

async_hooks 是 Node.js v8.1.0 及以上版本的内置核心模块,不需要单独安装。出现找不到模块的警告,大概率是你的项目构建工具(比如 Webpack)的配置问题:构建工具把 Node 内置模块误当成第三方 npm 包去查找,导致在 node_modules 目录下找不到 async_hooks,从而抛出警告。

你和同事用相同 Node 版本但他无此警告,可能是他的构建工具配置正确处理了 Node 内置模块(比如 Webpack 配置了 target: 'node'),或是本地缓存、环境配置存在差异。

你修改代码的合理性

把 tryRequireAsyncHooks 函数里的 return require('async_hooks') 改成 return {},这个修改是安全且合理的:

  • on-finished 和 raw-body 这两个模块中,tryRequireAsyncHooks 是用来加载可选的异步跟踪功能,属于非核心逻辑。即使返回空对象,也不会影响模块的核心功能(处理响应结束、解析请求体)。
  • 原函数的设计本就是加载失败时返回空对象,你的修改相当于直接跳过了加载尝试,本质上和加载失败的分支逻辑一致,只是避免了构建工具静态解析时的警告。

更优雅的解决方式(无需修改 node_modules 代码)

修改 node_modules 里的代码不是长久之计,下次重装依赖会失效,建议从构建配置入手:

  • 如果用 Webpack:
    • 若项目是 Node.js 后端项目,设置 target: 'node',Webpack 会自动识别 Node 内置模块,不会去 npm 查找。
    • 若前端项目依赖了这些 Node 端模块,可安装 node-libs-browser,并在 Webpack 配置中添加:
      resolve: {
        fallback: {
          async_hooks: false // 不需要该功能时直接设为false即可
        }
      }
      
  • 清理依赖缓存:执行 npm cache clean --force 或 yarn cache clean,然后重新安装依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:52:48