如何将TypeScript-ESLint规则仅应用于TypeScript文件?
正确配置ESLint限定范围规则(Monorepo场景)
错误原因
你遇到的ConfigError是因为直接在自定义文件范围的配置块中展开tseslint.configs.recommended时,该推荐配置本身已包含files字段,导致同一个配置对象内出现重复的文件匹配规则,触发ESLint的配置校验错误。
解决方案
采用ESLint扁平配置(v9+),将Node端JS文件和TypeScript文件的规则拆分为两个独立的配置块,避免规则范围冲突。以下是完整配置示例:
1. 安装依赖
确保已安装最新版相关包:
npm install eslint @eslint/js typescript-eslint eslint-plugin-n typescript --save-dev
2. 编写eslint.config.js配置文件
import js from '@eslint/js'; import tseslint from 'typescript-eslint'; import nodePlugin from 'eslint-plugin-n'; export default tseslint.config( // 配置1:仅针对Node端JS文件(Jest/Rollup/Webpack配置等) { files: ['**/*.js', '**/*.cjs'], ignores: ['node_modules/**', 'dist/**', 'packages/*/dist/**'], plugins: { n: nodePlugin, }, rules: { ...js.configs.recommended.rules, ...nodePlugin.configs.recommended.rules, // 可添加自定义Node规则,比如: 'n/no-unpublished-require': 'off' }, languageOptions: { ecmaVersion: 'latest', sourceType: 'module', globals: { node: true, }, }, }, // 配置2:仅针对TypeScript文件 tseslint.configs.recommended, { files: ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'], ignores: ['node_modules/**', 'dist/**', 'packages/*/dist/**'], languageOptions: { parserOptions: { // Monorepo场景建议用单独的tsconfig.eslint.json管理所有TS文件 project: './tsconfig.eslint.json', tsconfigRootDir: import.meta.dirname, }, }, rules: { // 自定义TS规则,比如: '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], '@typescript-eslint/no-explicit-any': 'warn' }, } );
3. Monorepo专属调整
如果你的项目是Monorepo结构(如packages/*),建议创建tsconfig.eslint.json统一管理TS校验范围:
{ "extends": ["./packages/*/tsconfig.json"], "include": ["packages/**/*.ts", "packages/**/*.tsx"], "exclude": ["node_modules", "dist", "packages/*/dist"] }
验证配置
运行以下命令分别检查JS和TS文件,确认规则仅应用于目标文件:
# 检查JS配置文件 npx eslint packages/*/webpack.config.js # 检查TS文件 npx eslint packages/*/src/**/*.ts
内容的提问来源于stack exchange,提问作者mrbinky3000
相关产品推荐
相关产品推荐

