如何在NX lint时忽略生成器模板中的.eslintrc.json文件
解决NX插件Lint时模板ESLint配置文件报错问题
问题场景
我创建了一个名为nx的NX插件/lib,其package.json中定义的linting目标如下:
"lint": { "executor": "@nrwl/linter:eslint", "outputs": ["{options.outputFile}"], "options": { "lintFilePatterns": [ "libs/nx/executors.json", "libs/nx/package.json", "libs/nx/src/executors", "libs/nx/src/generators" ] } }
插件自身的.eslintrc.json配置:
{ "extends": ["../../.eslintrc.json"], "ignorePatterns": ["!**/*"] }
继承的根目录.eslintrc.json配置:
{ "root": true, "ignorePatterns": ["**/*"], "plugins": ["@nrwl/nx"], "overrides": [ { "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], "rules": { "@nrwl/nx/enforce-module-boundaries": [ "error", { "enforceBuildableLibDependency": true, "allow": [], "depConstraints": [ { "sourceTag": "*", "onlyDependOnLibsWithTags": ["*"] } ] } ] } }, { "files": ["*.ts", "*.tsx"], "extends": ["plugin:@nrwl/nx/typescript"], "rules": {} }, { "files": ["*.js", "*.jsx"], "extends": ["plugin:@nrwl/nx/javascript"], "rules": {} }, { "files": "*.json", "parser": "jsonc-eslint-parser", "rules": {} } ] }
报错情况
生成器目录中包含用于生成ts应用的模板,每个模板都有自己的.eslintrc.json文件。运行lint时会解析这些文件,导致报错:
Failed to load config "../../.eslintrc.base.json" to extend from. Referenced from: [...]/libs/nx/src/generators/application/template/.eslintrc.json
我尝试修改插件的.eslintrc.json中的ignorePatterns为以下内容,但没有效果:
{ "ignorePatterns": ["!**/*", "**/*.eslintrc.json"] }
解决方案
方案1:调整lint目标的文件匹配规则(推荐)
直接在package.json的lint配置中,通过否定匹配模式排除模板目录中的.eslintrc.json文件,避免ESLint解析这些文件:
"lint": { "executor": "@nrwl/linter:eslint", "outputs": ["{options.outputFile}"], "options": { "lintFilePatterns": [ "libs/nx/executors.json", "libs/nx/package.json", "libs/nx/src/executors", "libs/nx/src/generators", "!libs/nx/src/generators/**/.eslintrc.json" ] } }
方案2:在ESLint配置中精准忽略模板文件
修改插件的.eslintrc.json,调整ignorePatterns的顺序和匹配规则,确保模板中的.eslintrc.json被正确忽略:
{ "extends": ["../../.eslintrc.json"], "ignorePatterns": [ "!**/*", "**/generators/**/.eslintrc.json" ] }
这里的关键是用更精确的路径**/generators/**/.eslintrc.json,避免模糊匹配导致的失效。
方案3:在根ESLint配置中排除模板JSON文件
在根目录的.eslintrc.json中,针对JSON文件的规则块添加exclude属性,跳过模板中的.eslintrc.json:
{ "root": true, "ignorePatterns": ["**/*"], "plugins": ["@nrwl/nx"], "overrides": [ // ... 其他规则块保持不变 { "files": "*.json", "exclude": ["**/generators/**/.eslintrc.json"], "parser": "jsonc-eslint-parser", "rules": {} } ] }
原因说明
之前的ignorePatterns修改无效,是因为!**/*会先取消根配置中**/*的忽略规则,让所有文件都被纳入检查范围;而后续添加的**/*.eslintrc.json模糊匹配可能因为路径优先级问题,没有正确覆盖模板目录下的目标文件。通过精准路径匹配或直接在lint目标中排除,能从根源避免ESLint解析这些不属于当前插件的模板配置文件。
内容的提问来源于stack exchange,提问作者caisah
相关产品推荐
相关产品推荐

