Typescript 为什么我会得到错误`TypeError:fs.readdir不是Cypress中的函数`

Typescript 为什么我会得到错误`TypeError:fs.readdir不是Cypress中的函数`,typescript,cypress,Typescript,Cypress,我写了这段代码,用TypeScript写的很好。当我在cypress的测试文件中使用相同的代码时,我得到错误TypeError:fs.readdir不是一个函数 import * as fs from 'fs' let inputPath: String = "C:\\Users\\rkon"; let replacementString = "/"; let newInputPath = inputPath.split('\\').join(replacementString) consol

我写了这段代码,用TypeScript写的很好。当我在cypress的测试文件中使用相同的代码时,我得到错误
TypeError:fs.readdir不是一个函数

import * as fs from 'fs'

let inputPath: String = "C:\\Users\\rkon";
let replacementString = "/";
let newInputPath = inputPath.split('\\').join(replacementString)
console.log('path after replacement: ' + newInputPath);

fs.readdir(newInputPath as string, function (err: any, files: any[]) {
    //handling error
    if (err) {
        return console.log('Unable to scan directory: ' + err);
    }
    //listing all files using forEach
    files.forEach(function (file) {
        console.log('file: ' + file);
    });
});
我首先执行以下操作来验证上述代码:

>tsc temp.ts
>node temp.js
正如我所说,它工作得很好,但为什么相同的代码在Cypress中不工作,并出现以下错误:

TypeError:fs.readdir不是函数


令人惊讶的是,下面这两条语句在Windows机器中都能很好地获取目录(请注意,由于Cypress测试在浏览器环境中运行,因此此解决方案是一种变通方法)


令人惊讶的是,下面这两条语句在Windows机器中都能很好地获取目录(请注意,由于Cypress测试在浏览器环境中运行,因此此解决方案是一种变通方法)


您不能在cypress中使用节点模块,因为cypress在浏览器中执行测试代码。 要使用节点模块,必须使用插件文件中定义的任务(在节点进程中执行)(很重要,因为插件文件是在节点上下文中执行的)

因此,您必须在
cypress.json
中告诉cypress您正在使用插件文件:

{
    ...
    "pluginsFile": "cypress/plugins/plugins.js",
    ...
  }
然后在
plugins.js
中定义一个任务:

on('task', {
    readdir({ path }) {
      return fs.readdir(path, .....);
    }
  });
使用如下任务:

cy.task("readdir", { path: "..." }, { timeout: 30000 });

您不能在cypress中使用节点模块,因为cypress在浏览器中执行测试代码。 要使用节点模块,必须使用插件文件中定义的任务(在节点进程中执行)(很重要,因为插件文件是在节点上下文中执行的)

因此,您必须在
cypress.json
中告诉cypress您正在使用插件文件:

{
    ...
    "pluginsFile": "cypress/plugins/plugins.js",
    ...
  }
然后在
plugins.js
中定义一个任务:

on('task', {
    readdir({ path }) {
      return fs.readdir(path, .....);
    }
  });
使用如下任务:

cy.task("readdir", { path: "..." }, { timeout: 30000 });

看起来您可能需要修改模块分辨率标志。您是否在node_modules目录中安装了fs?看起来您可能需要修改模块解析标志。您是否已在node_modules目录中安装了fs?