Node.js项目执行ESLint自定义规则报错:规则定义未找到
解决ESLint自定义规则找不到的错误
执行自定义ESLint规则时抛出如下错误:
1:1 error Definition for rule 'D:/Sports/eslint-rules/no-log.js' was not found
当前配置与规则文件
.eslintrc.js 配置
module.exports = { env: { node: true, }, plugins: ['eslint-rules'], rules: { 'eslint-rules/no-log': 'error', 'eslint-rules/max-params': ['error', { maxParams: 3 }], }, };
eslint-rules/no-log.js 规则文件
module.exports = { meta: { type: "suggestion", docs: { description: "Disallow console.log() in code", category: "Best Practices", recommended: true, }, schema: [], }, create: function (context) { return { CallExpression(node) { const { callee } = node; if ( callee.type === "MemberExpression" && callee.object && callee.object.name === "console" && callee.property && callee.property.name === "log" ) { context.report({ node, message: "Avoid using console.log() in code.", }); } }, }; }, };
错误原因
你将eslint-rules目录当作ESLint插件配置,但该目录不符合ESLint插件规范——缺少插件入口文件和package.json配置,导致ESLint无法识别其中的规则,误将路径解析为规则名。
解决方案
方案一:按规范创建自定义ESLint插件
- 调整目录结构为:
eslint-rules/ package.json lib/ rules/ no-log.js max-params.js index.js
- 在
eslint-rules/package.json中添加基础配置:
{ "name": "eslint-rules", "version": "1.0.0", "main": "lib/index.js" }
- 创建
eslint-rules/lib/index.js导出所有规则:
module.exports = { rules: { 'no-log': require('./rules/no-log'), 'max-params': require('./rules/max-params') } };
- 在项目根目录执行本地链接,让ESLint识别插件:
npm link ./eslint-rules
方案二:直接引用规则文件路径(临时快速方案)
无需配置plugins,直接在.eslintrc.js中指定规则文件的相对路径:
module.exports = { env: { node: true, }, rules: { './eslint-rules/no-log.js': 'error', './eslint-rules/max-params.js': ['error', { maxParams: 3 }], }, };
完成上述配置后,重新执行命令即可生成JSON报告:
npx eslint ./ --format json --output-file eslint-report.json
内容的提问来源于stack exchange,提问作者semicolon
相关产品推荐
相关产品推荐

