J'ai créé un nouveau projet React Native avec --template typescript
J'ai supprimé le répertoire de template
qui faisait partie du passe-partout.
J'ai ensuite procédé à l'ajout d'ESLint:
module.exports = { parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], extends: ["airbnb-typescript-prettier"] };
Cependant, lorsque j'ouvre babel.config.js
, j'obtiens cette erreur
Erreur d'analyse: "parserOptions.project" a été défini pour @ typescript-eslint / parser. Le fichier ne correspond pas à la configuration de votre projet:
/Users/Dan/site/babel.config.js
. Le fichier doit être inclus dans au moins un des projets fournis.
9 Réponses :
Vous devez ajouter ce fichier à votre tableau d' include
tsconfig. Voir typescript-eslint / typescript-eslint # 967 pour plus de détails.
mais que faire si je veux qu'il soit ignoré? Il montre toujours si je l'ajoute dans le tableau d'exclusion.
Je crois que le fait est que typescript + eslint s'appuie sur l'analyseur @ typescript-eslint, de sorte que les fichiers lintés soient catégoriquement visibles par ts. Je ne suis honnêtement pas sûr de ce cas d'utilisation. Pourquoi en avez-vous besoin pour être exclu? Je crois que la philosophie de typescript-eslint est basée sur l'hypothèse que tous les fichiers linted devraient faire partie du projet, et tous les fichiers qui font partie du projet devraient être linted (même s'ils ne sont pas un point d'entrée critique pour le code de production) - Il serait judicieux par exemple de vouloir des erreurs de type si dans ce cas vous spécifiiez une mauvaise configuration babel.
Il peut y avoir un contexte plus utile que je devrais vérifier aussi ici
Vous n'avez pas besoin d'inclure ce fichier, ne l'analysez pas. Jetez un œil à ma réponse , je l'ai expliqué et partagé un code pour résoudre ce problème :)
Comme suggéré dans ce numéro , vous pouvez ajouter createDefaultProgram: true
à vos options d'analyseur en tant que solution temporaire, mais au détriment de potentiellement rendre votre IDE plus lent.
{ ... parserOptions: { project: './tsconfig.json', createDefaultProgram: true, }, }
N'utilisez pas createDefaultProgram
. Il a été introduit comme un palliatif et sera supprimé dans une version future, comme expliqué dans ce numéro . Jetez un œil à ma réponse , j'ai expliqué pourquoi l'ajout de createdDefaultProgram
résout l'erreur et comment résoudre sans ajouter cette option :)
Vous pouvez créer un fichier de configuration TypeScript distinct ( tsconfig.eslint.json
) destiné à la configuration eslint
. Ce fichier étend la configuration de tsconfig
et les programmes d'installation include
clé pour les fichiers qui doivent être lintés.
.eslint.js
:
// ... babel.config.js
tsconfig.eslint.json
:
{ "extends": "./tsconfig.json", "include": [ // ... "babel.config.js" ] }
Ou si vous voulez l'ignorer, vous pouvez le mettre dans .eslintignore
.
.eslintignore
:
// ... parserOptions: { // ... project: "./tsconfig.eslint.json", // ... }, // ...
Vous n'avez pas besoin d'inclure ce fichier, ne l'analysez pas. Jetez un œil à ma réponse , je l'ai expliqué et partagé un code pour résoudre ce problème :)
J'utilise un lien symbolique de mon dossier de projet pointer vers mon dossier de départ:
/opt/project/workspace
=> ~/worspace
En ouvrant le VSCode à l'aide du chemin du lien symbolique ~/workspace
l'erreur persiste toujours.
L'ouverture de VSCode en utilisant le chemin d'origine: /opt/project/workspace
résout le problème.
Cela ne devrait pas être un problème, mais pour l'instant c'est le cas.
Dans mes projets, une configuration appropriée que j'utilise est la suivante:
tsconfig.json
module.exports = { root: true, env: { node: true, }, globals: { Promise: "readonly" }, parser: "@typescript-eslint/parser", parserOptions: { sourceType: "module", tsconfigRootDir: __dirname, project: ["./tsconfig.eslint.json"], }, plugins: ["@typescript-eslint"], extends: [ "eslint:recommended", "prettier/@typescript-eslint", "plugin:@typescript-eslint/recommended", "plugin:@typescript-eslint/recommended-requiring-type-checking", ], }
tsconfig.eslint.json
{ "extends": "./tsconfig.json", "include": [ "src/**/*.ts", ".eslintrc.js", "tests/**/*.ts", "jest.config.js", "examples/**/*.ts" ], "exclude": ["node_modules"] }
.eslintrc.js
{ "compilerOptions": { /* Basic Options */ "target": "es5" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "resolveJsonModule": true, "lib": [ "es2017", "es7", "es6", "dom" ] /* Specify library files to be included in the compilation. */, "declaration": true /* Generates corresponding '.d.ts' file. */, "outDir": "lib" /* Redirect output structure to the directory. */, /* Strict Type-Checking Options */ "strict": true /* Enable all strict type-checking options. */, "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, /* Advanced Options */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */, "baseUrl": ".", "paths": { "@/*": ["src/*"] } }, "include": ["src/**/*.ts"] }
Vous n'avez pas besoin d'inclure ces fichiers, il vous suffit de spécifier l'analyseur ESLint TypeScript pour analyser uniquement les fichiers corrects. Jetez un œil à ma réponse , je l'ai expliqué et partagé une configuration pour résoudre ce problème :)
Dans notre cas, nous avons plusieurs .eslintrc et plusieurs tsconfig.json dans notre arborescence de répertoires. (Un pour le serveur à .
, Et un pour le client React à ./client
.)
Cela fonctionnait bien avec la CLI mais pas avec le plug-in de VS Code.
Le correctif consistait à définir la valeur du project
./client/.eslintrc pour qu'elle soit relative à la racine et non au fichier .eslintrc. Après l'avoir changé de "./tsconfig.json" en "./client/tsconfig.json", le lintage IDE fonctionne comme prévu.
Vous devez inclure la prise en charge de typescript pour les fichiers *.config.js
:
tsconfig.json
:
{ "include": [ "**/*.config.js" // for *.config.js files ] }
Et puis rechargez votre IDE!
Le problème survient pour l'une des raisons ci-dessous:
parserOptions.project
;parserOptions.project
, n'avez pas spécifié createDefaultProgram
( il sera supprimé dans une version future ), et vous lintrez des fichiers non inclus dans le projet (par exemple babel.config.js
, metro.config.js
)À partir de la documentation de TypeScript ESLint Parser :
parserOptions.project
Cette option vous permet de fournir un chemin vers le
tsconfig.json
votre projet. Ce paramètre est obligatoire si vous souhaitez utiliser des règles nécessitant des informations de type.(...)
Notez que si ce paramètre est spécifié et que
createDefaultProgram
ne l'est pas, vous ne devez lint que les fichiers inclus dans les projets tels que définis par les fichierstsconfig.json
fournis. Si votre configuration existante n'inclut pas tous les fichiers que vous souhaitez lint, vous pouvez créer untsconfig.eslint.json
distinct.
Pour le résoudre, mettez à jour votre configuration ESLint comme suit:
{ // ... overrides: [ { files: ['*.ts', '*.tsx'], // Your TypeScript files extension parserOptions: { project: ['./tsconfig.json'], // Specify it only for TypeScript files }, } ], parser: '@typescript-eslint/parser', // ... }
J'ai eu ce problème dans VsCode lorsque j'ouvrais mon projet trop haut dans la structure des dossiers. Une solution étrange mais cela a fonctionné.
Dans mon exemple, le projet de fonctions Firestore pour express en .ts, j'ai dû l'ouvrir à partir du dossier de fonctions qu'il avait créé.
J'aurais dû remarquer que c'était ce genre de problème puisque 'npm run-script lint' n'a jamais renvoyé d'erreur lui-même.
Ajoutez
babel.config.js
dans le fichiertsconfig.js
: "include": ["next-env.d.ts", " * / .ts", " * / .tsx", "postcss.config.js", ".eslintrc.js"]@HimanshuTanwar pas besoin d'inclure
babel.config.js
, ne l'babel.config.js
pas avec l'analyseur ESLint TypeScript. Jetez un œil à ma réponse pour une autre approche, en analysant uniquement les fichiers TS.