Cypress - Error: Can't resolve 'async_hooks'

Cypress - Error: Can't resolve 'async_hooks'

当前行为

我知道此类问题已在 5.1.0 版本中修复,但是...

我正在尝试在 before 挂钩的 Node JS 部分逻辑中播种数据库 我们有 cls-hooked 和另外 1 个用于共享的内部 npm 模块 async_hooks 当我尝试导入和使用任何模块时,我在测试脚本启动时收到崩溃:

Error: Webpack Compilation Error
./node_modules/...[our private module name].../lib/...[file name]....js
Module not found: Error: Can't resolve 'async_hooks' in '/Users/.../node_modules/...[private module or cls-hooked].../lib'
resolve 'async_hooks' in '/Users/.../node_modules/...[private module or cls-hooked].../lib'
  Parsed request is a module
  using description file: /Users/.../node_modules/...[private module or cls-hooked].../package.json (relative path: ./lib)
    Field 'browser' doesn't contain a valid alias configuration
    resolve as module

期望的行为

测试脚本启动应该顺利进行 before 钩子执行

重现测试代码

需要 ./cypress/plugins/index.ts 中的某些模块具有下一个类似的逻辑

var async_hooks = require("async_hooks");
var asyncLocalStorage = new async_hooks.AsyncLocalStorage();
...
asyncLocalStorage.getStore();

赛普拉斯版本

^8.1.0 - 8.5.0

Cypress binary version: 8.5.0
Electron version: 13.2.0
Bundled Node version: 14.16.0

尝试过的 Node 版本:14.17.616.9.1

同样适用于:

Cypress binary version: 7.7.0
Electron version: 12.0.0-beta.14
Bundled Node version: 14.15.1

其他

额外安装 "async_hooks": "^1.0.0" 没有帮助

使用 TS "typescript": "^4.1.5" OS macOS Big Sur 11.16

问题出在 Cypress 中进程浏览器和 NodeJs 的 1 个通用文件中。 在这种情况下,Webpack 使用 'browser' 上下文构建了包,但收到了 NodeJs 上下文逻辑。这就是错误发生的原因。 当我在文件的浏览器部分使用 enum 时,除此之外还导出 NodeJs 逻辑,它 (Webpack) 没有生成 'treeshaking',因此 NodeJs 逻辑被导入到浏览器处理逻辑的包中。 ‍♂️