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

Cypress启动测试脚本时报Can't resolve 'async_hooks'错误如何解决

Cypress导入async_hooks相关模块报错解决方案

根因说明

  • async_hooks是Node.js 14+内置的原生核心模块,无需额外安装,npm上的同名第三方包已废弃,你之前单独安装该包的操作无效,反而可能引发冲突。
  • 你提到的Cypress 5.1.0版本修复的是运行时Node层对async_hooks的支持问题,本次报错属于构建阶段webpack配置问题:Cypress编译plugins层的TypeScript代码时,webpack默认使用web作为构建目标,会自动过滤Node原生模块,因此找不到async_hooks。

可落地解决方案

方案1:修改webpack预处理器配置适配Node环境

修改cypress/plugins/index.ts中的webpack配置,指定构建目标为Node,显式声明async_hooks为原生外部模块:

import * as webpack from '@cypress/webpack-preprocessor'

export default (on, config) => {
  const webpackOpts = {
    webpackOptions: {
      target: 'node',
      externals: {
        'async_hooks': 'commonjs async_hooks',
        // 其他Node原生模块报错可按相同格式添加
      },
      resolve: {
        extensions: ['.ts', '.js']
      },
      module: {
        rules: [
          {
            test: /\.ts$/,
            exclude: /node_modules/,
            use: 'ts-loader'
          }
        ]
      }
    }
  }
  on('file:preprocessor', webpack(webpackOpts))

  // 原有数据库初始化等逻辑保留即可
  return config
}

如果项目未安装对应依赖,先执行安装:
npm i -D @cypress/webpack-preprocessor webpack ts-loader

方案2:拆分Node专属逻辑避免浏览器侧导入

检查所有代码,确保用到cls-hooked和内部私有模块的代码,仅在Cypress plugins层(Node环境)执行,不要在cypress/integration测试用例、cypress/support等浏览器环境执行的代码中导入这些模块。

方案3:通过Cypress Task封装Node逻辑

如果你需要在测试用例的before钩子中触发初始化操作,不要直接在测试用例中导入Node专属模块,而是将逻辑封装为Task调用:

  1. 在cypress/plugins/index.ts中注册任务:
import { initDB } from '你的内部私有模块路径'

export default (on, config) => {
  on('task', {
    async initDatabase() {
      // 所有用到async_hooks的数据库初始化逻辑写在这里
      await initDB()
      return null
    }
  })
  return config
}
  1. 在测试用例的before钩子中调用:
before(() => {
  cy.task('initDatabase', { timeout: 30000 }) // 可根据初始化耗时调整超时时间
})

验证步骤

  1. 先卸载额外安装的第三方async_hooks包:npm uninstall async_hooks
  2. 按照上述方案修改配置后重启Cypress即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:36:03