javascript - Parsningsfel: hittades inte av projektservicen, men jag har ignorerat dessa filer


Min projektstruktur

  • dist (kompilerad kod av ts)

    • bibliotek

      • lib.d.ts
      • lib
      • lib.d.ts

      • lib.js
    • index.d.ts
    • index.js
  • src (källkod)

    • bibliotek

      • lib.ts
      • lib
      • lib.ts

    • index.ts
  • eslint.config.mjs
  • packages.json
  • tsconfig.json
  • yarn.lock

Min tsconfig.json

{
    "compilerOptions": {
        "target": "ES2022",
        "module": "commonjs",
        "outDir": "./dist",
        "rootDir": "./",
        "strict": true,
        "esModuleInterop": true,
        "resolveJsonModule": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true,
        "baseUrl": "./src",
        "declaration": true,
        "allowJs": true
    },
    "include": [
        "src/**/*.ts",
    ],
    "exclude": [
        "eslint.config.mjs",
        "dist/**"
    ]
}

Min eslint.config.mjs:

// @ts-check

import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import tsParser from '@typescript-eslint/parser'

import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
    
const __dirname = dirname(fileURLToPath(import.meta.url));

export default tseslint.config(
  {
    files: [
      "src/**/*.ts"
    ],
    ignores: [
      'dist/**/*.ts',
      'dist/**',
      "**/*.mjs",
      "eslint.config.mjs",
      "**/*.js"
    ],
    rules: {
      "@typescript-eslint/no-unnecessary-condition": "error",
      "@typescript-eslint/no-unnecessary-type-assertion": "error",
    },
  },
  ...tseslint.configs.strictTypeChecked,
  ...tseslint.configs.recommendedTypeChecked,
  {
    languageOptions: {
      parserOptions: {
        project: "./tsconfig.json",
        projectService: true,
        tsconfigRootDir: __dirname,
        projectFolderIgnoreList: [
          "**dist**",
        ],
      },
    },
  },
);

Jag vill att tsc ska lägga de kompilerade utdatafilerna i dist-mappen (jag är ny på TypeScript så jag vet inte om detta är rätt sätt för ett TS-projekt).

Jag har ignorerat filer under dist-mappen men jag fick fortfarande dessa fel:

/Users/kainzhong/VSCode/eslintTmp/dist/src/index.d.ts
  0:0  error  Parsing error: /Users/kainzhong/VSCode/eslintTmp/dist/src/index.d.ts was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject

/Users/kainzhong/VSCode/eslintTmp/dist/src/index.js
  0:0  error  Parsing error: /Users/kainzhong/VSCode/eslintTmp/dist/src/index.js was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject

/Users/kainzhong/VSCode/eslintTmp/dist/src/lib/lib.d.ts
  0:0  error  Parsing error: /Users/kainzhong/VSCode/eslintTmp/dist/src/lib/lib.d.ts was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject

/Users/kainzhong/VSCode/eslintTmp/dist/src/lib/lib.js
  0:0  error  Parsing error: /Users/kainzhong/VSCode/eslintTmp/dist/src/lib/lib.js was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject

/Users/kainzhong/VSCode/eslintTmp/eslint.config.mjs
  0:0  error  Parsing error: /Users/kainzhong/VSCode/eslintTmp/eslint.config.mjs was not found by the project service. Consider either including it in the tsconfig.json or including it in allowDefaultProject

Har jag inte redan ignorerat dessa filer? Varför klagar eslint fortfarande på dem?

Svar #1

Denna konfiguration ignorerar faktiskt inte de filerna - det är problemet. ignores har två sätt att bete sig på:

  • När du är i en konfigurationsblock med files stoppar det det specifika konfigurationsblocket från att påverka de filer som ignoreras
  • När de är i sin egen konfigurationsblock utan files så berättar det för ESLint att ignorera dessa filer

Flytta ignores till sin egen block i början:

export default tseslint.config(
  {
    ignores: [
      'dist/**/*.ts',
      'dist/**',
      "**/*.mjs",
      "eslint.config.mjs",
      "**/*.js"
    ],
  },
  {
    files: [
      "src/**/*.ts"
    ],
  // ...

Från https://eslint.org/docs/latest/use/configure/configuration-files#excluding-files-with-ignores.

Relaterade artiklar