node.js - Cum să repar eslintrc Fișierul nu corespunde configurației proiectului tău?
În proiectul meu TypeScript, folosesc ESLint. Fișierele de mai jos se află în directorul rădăcină, și am de asemenea subfolderele /dist și /src.
eslintrc.js
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
rules: {
strict: 'error',
semi: ['error', 'always'],
'no-cond-assign': ['error', 'always'],
},
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
],
}
tsconfig.json
{
"compilerOptions": {
"outDir": "dist",
"noImplicitAny": true,
"moduleResolution": "Node",
"resolveJsonModule": true,
"module": "ES2020",
"target": "ES2020",
"lib": ["ES2020"],
"allowJs": false,
"alwaysStrict": true
},
"include": ["src"]
}
cuvântul module de sus are o linie roșie cu această eroare
Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: .eslintrc.js.
The file must be included in at least one of the projects provided. eslint
Cum pot să repar asta?
Răspuns #1
Actualizează-ți eslintrc.js pentru a include:
ignorePatterns: ['.eslintrc.js']
Răspunsul #2
Despre ce este această eroare?
Eroarea spune practic că fișierul eslintrc.js în sine este ambele:
- Găsit de ESLint, dar
- Nu se potrivește cu lista de fișiere pe care ar trebui să le verifice
Deci, ESLint nu știe ce să facă și intră în panică!
Rețineți că, deși acest fișier nu include codul dvs., ar trebui să decideți dacă doriți ca acest fișier să fie verificat pentru stil (de exemplu, pentru tab vs spațiu, sau ghilimele duble vs ghilimele simple) sau nu.
Ce ar trebui făcut?
Poți omite fie (1), fie (2) din situația conflictuală de mai sus.
Soluția 1: Spuneți ESLint să ignoră fișierul
Este mai ușor. Trebuie doar să adaugi numele fișierului (de exemplu .eslintrc.js) în .eslintignore.
De asemenea, poți vedea cazul 1.3 al răspunsului meu, aici pentru diferite moduri în care poate fi făcut.
- Avantaje: Rapid. Ușor. Fără durere.
- Contra: Formatarea acestui fișier poate deveni inconsistentă cu alte fișiere în ceea ce privește stilul de tab/spațiu sau de ghilimele.
Soluția 2: Spuneți ESLint să analizeze acest fișier (Preferat)
Typescript-ESLint obține lista de fișiere de inclus din tsconfig.json prin parserOptions > project.
Așadar, poți fie să adaugi fișierul în tsconfig.json existent (Soluția 2.1), fie să creezi un tsconfig.eslint.json secundar pentru a include fișiere ca acesta, pe care vrei să le verifice typescript-eslint, dar care nu trebuie neapărat procesate de compilatorul TypeScript.
- Pro: Acest fișier, și alte configurații .js similare, vor fi de asemenea incluse pentru aliniere și pentru a menține totul consistent.
- Contra: S-ar putea să nu vrei ca aceste fișiere de configurare să fie verificate cu lint. De asemenea, necesită puțin efort suplimentar oricum.
Soluția 2.1: adaug-o la tsconfig.json existent
// in tsconfig.json ...
"include": [
".eslintrc.js",
// ...
]
Soluția 2.2: adaugă-l într-un fișier separat tsconfig.eslint.json Creează un fișier numit tsconfig.eslint.json cu acest conținut:
// new file: tsconfig.eslint.json
{
"include": [
".eslintrc.js"
]
}
și apoi injectează-l în eslintrc.js 's parserOptions > project (da, project acceptă atât un șir de caractere, cât și un tablou de șiruri de caractere) :
// in eslintrc.js ...
parserOptions: {
project: [
resolve(__dirname, './tsconfig.json'),
resolve(__dirname, './tsconfig.eslint.json'),
],
}
P.S. Acest răspuns este foarte asemănător, îi voi acorda puțin merit pentru asta.
Răspunsul #3
Acest lucru este acum documentat în documentația TypeScript ESLint în care primesc erori care îmi spun „Fișierul trebuie inclus în cel puțin unul dintre proiectele furnizate”
TLDR: vezi "Opțiunea aditivă" mai jos pentru cea mai bună soluție, în opinia mea.
Iată documentul relevant cu note adăugate. Acesta se bazează pe un răspuns anterior.
Această eroare înseamnă că fișierul care este verificat cu linting nu este inclus în niciunul dintre fișierele tsconfig pe care ni le-ați furnizat. De multe ori, acest lucru se întâmplă atunci când utilizatorii au fișiere de test sau similare care nu sunt incluse în tsconfig-urile lor normale.
În funcție de ceea ce vrei să realizezi:
Dacă nu doriți să analizați fișierul:
- Folosește una dintre opțiunile oferite de ESLint pentru a ignora fișiere, cum ar fi un fișier .eslintignore sau configurația ignorePatterns. => Vezi Soluția 1 din acest răspuns
Dacă chiar vrei să verifici fișierul:
Dacă nu doriți să analizați fișierul cu verificare de tipuri:
Folosește configurația
overridesa ESLint pentru a configura fișierul să nu fie analizat cu informații de tip.
- O configurație populară este să omiteți completările de mai sus din configurația de nivel superior și să le aplicați doar fișierelor TypeScript printr-o suprascriere. => Vezi opțiunea aditivă de mai jos
- Folosește configurația
overridesa ESLint pentru a configura fișierul astfel încât să nu fie analizat cu informații de tip.- O configurare populară este să omiți completările de mai sus din configurația la nivel înalt și să le aplici doar fișierelor TypeScript printr-o suprascriere. => Vezi opțiunea aditivă de mai jos
- Dacă nu doriți să analizați fișierul cu verificare tipizată:
- Folosiți configurația
overridesa ESLint pentru a configura fișierul astfel încât să nu fie analizat cu informații despre tipuri.- O configurație populară este să omiteți modificările de mai sus din configurația de nivel superior și să le aplicați doar fișierelor TypeScript printr-un override. => Consultați opțiunea aditivă de mai jos
- Alternativ, poți adăuga
parserOptions: { project: null }într-o suprascriere pentru fișierele pe care dorești să le excluzi. Reține că{ project: undefined }nu va funcționa. => Vezi opțiunea de scădere mai josDacă vrei să verifici fișierul cu linting bazat pe tipuri:
- Verificați opțiunea include a fiecărui tsconfig pe care îl furnizați la
parserOptions.project- trebuie să vă asigurați că toate fișierele corespund unui globinclude, altfel instrumentele noastre nu vor putea să îl găsească. => Vezi Soluția 2.1 din acest răspunsDacă fișierul tău nu ar trebui să facă parte din unul dintre tsconfig-urile existente (de exemplu, este un script/unealtă locală în repo), atunci ia în considerare crearea unui nou tsconfig (recomandăm să-l numești
tsconfig.eslint.json) în rădăcina proiectului tău, care să listeze acest fișier în include. Pentru un exemplu, poți verifica configurația pe care o folosim în acest repo: => Vezi Soluția 2.2 a acestui răspuns sau exemplele de mai jos
tsconfig.eslint.json.eslintrc.js
Opțiune aditivă
Cu această soluție, doar adaugi (adică activezi) opțiunea parser: ''@typescript-eslint/parser'' (și alte opțiuni conexe) pentru fișierele sursă TypeScript. Alte fișiere precum eslintrc.js nu vor fi afectate de această configurație, dar vor fi în continuare verificate conform restului configurației.
Adaugă aceasta la eslintrc.js
overrides: [
{
files: ['src/**/*.ts'],
parser: '@typescript-eslint/parser',
parserOptions: {
tsconfigRootDir: __dirname,
project: ['./tsconfig.json'],
},
rules: {},
},
],
Configurarea de mai sus folosește ESLint pentru TypeScript doar pentru fișierele din directorul src.
Rețineți că toate regulile TypeScript ESLint trebuie, de asemenea, să fie în intrarea overrides (adică nu în opțiunea rules de la rădăcină) sau veți primi mesaje de eroare precum acesta:
Error: Error while loading rule '@typescript-eslint/dot-notation': You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.
Opțiune subtractivă
Cu această soluție, eliminați opțiunea parser: ''@typescript-eslint/parser'' pentru fișierul de configurare eslintrc.js (sau eslint.cjs).
Adaugă aceasta la eslintrc.js
overrides: [
{
files: ['./.eslintrc.js'],
parserOptions: { project: null },
rules: {},
},
],
Configurarea de mai sus dezactivează TypeScript ESLint pentru fișierul eslintrc.js. De asemenea, puteți adăuga alte fișiere sau foldere în override.files pentru a extinde acest comportament.
Contra: toate regulile ESLint pentru TypeScript trebuie de asemenea eliminate în intrarea overrides sau vei primi mesaje de eroare de genul acesta:
Error: Error while loading rule '@typescript-eslint/dot-notation': You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.
