如何解决plugin/index.js中ESLint报fs.existsSync等any成员不安全访问警告
问题原因
这些告警来自ESLint的no-unsafe-member-access规则,触发原因是ESLint无法识别你代码中对应变量的类型,将其判定为any类型,因此报出成员访问不安全的警告:
fs.existsSync、fs.readFileSync告警:没有安装Node核心模块的类型声明文件,ESLint无法识别fs模块的类型module.exports告警:你的代码混用了ES Module(import导入)和CommonJS(module.exports导出)两种模块规范,导致ESLint无法识别module的类型
规范解决方法
方法1:统一模块规范(优先推荐)
你当前使用的是Cypress插件文件,旧版Cypress插件默认使用CommonJS规范,将导入方式改为CommonJS格式即可:
const fs = require('fs'); module.exports = (on, config) => { on('task', { readFile(filename) { if (fs.existsSync(filename)) { return fs.readFileSync(filename, 'utf8'); } return null; }, }); };
如果你的项目已配置支持ES Module,也可以将导出改为ES Module格式:
import * as fs from 'fs'; export default (on, config) => { on('task', { readFile(filename) { if (fs.existsSync(filename)) { return fs.readFileSync(filename, 'utf8'); } return null; }, }); };
方法2:安装Node类型声明
如果统一模块规范后仍有告警,安装Node核心模块的类型定义包即可:
npm install -D @types/node
如果是JS项目,在项目根目录的jsconfig.json中添加配置,确保类型声明被正确识别:
{ "compilerOptions": { "types": ["node"] }, "include": ["cypress/plugins/**/*"] }
方法3:针对性关闭规则(不推荐,仅作备选)
如果不需要该类型检查规则,可以在ESLint配置中针对Cypress插件目录关闭对应规则,在.eslintrc.json中添加:
{ "overrides": [ { "files": ["cypress/plugins/**/*.js"], "rules": { "@typescript-eslint/no-unsafe-member-access": "off" } } ] }
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

