node.js - Typescript/Eslint kastar "Kan inte läsa filen tsconfig.json" i varje projekt jag startar


I andra trådar har jag läst att problemet kan uppstå när eslint och tsconfig.json inte finns i samma arbetsmapp, men jag har alla filer i projektets rotmapp. På något sätt, efter att ha initierat projektet, verkar det fel som kastas försöka hitta tsconfig.json i föräldramappen till projektet (alltså utanför projektet):

Låt oss säga att projektet är i: '\parentFolder\ProjectRoot' tsconfig är i sökvägen: '\parentFolder\ProjectRoot\tsconfig.json'

Eslint-felet jag får (överst i index.ts) är följande:

Parsning fel: Kan inte läsa filen 'parentFolder\tsconfig.json'

  • Observera att eslint på något sätt letar efter tsconfig i fel mapp (föräldern till rotmappen)


Innehållet i \parentFolder\ProjectRoot är:

Stegen för att nå denna punkt har varit:

  • npm init
  • npm i -D typescript
  • lägg till "tsc": "tsc"-skript i package.json
  • npm run tsc -- --init
  • npm i express
  • npm i -D eslint @types/express @typescript-eslint/eslint-plugin @typescript-eslint/parser
  • npm i -D ts-node-dev

.eslintrc:

{
  "extends": [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ],
  "plugins": ["@typescript-eslint"],
  "env": {
    "browser": true,
    "es6": true
  },
  "rules": {
    "@typescript-eslint/semi": ["error"],
    "@typescript-eslint/explicit-function-return-type": 0,
    "@typescript-eslint/no-unused-vars": [
        "error", { "argsIgnorePattern": "^_" }
    ],
     "@typescript-eslint/no-explicit-any": 1,
    "no-case-declarations": 0
  },
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "project": "./tsconfig.json"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "target": "ES6",
    "outDir": "./build/",
    "module": "commonjs",
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "esModuleInterop": true
  }
}

package.json (ser ut som att ändra index.js till index.ts i "main" inte gör något)

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "tsc": "tsc",
    "dev": "ts-node-dev index.ts",
    "lint": "eslint --ext .ts ."
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/express": "^4.17.9",
    "@typescript-eslint/eslint-plugin": "^4.9.0",
    "@typescript-eslint/parser": "^4.9.0",
    "eslint": "^7.14.0",
    "ts-node-dev": "^1.0.0",
    "typescript": "^4.1.2"
  },
  "dependencies": {
    "express": "^4.17.1"
  }
}

index.ts (Jag får implicita fel här i req och res, jag antar att det beror på att tsconfig inte kan hittas).

const express = require('express');
const app = express();app.use(express.json());
const PORT = 3000;
app.get('/ping', (_req, res) => {
  res.send('pong');
});
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});


redigera:

Jag hade TypeScript installerat globalt (och även som ett utvecklingsberoende i dessa projekt). Eftersom jag trodde att detta kunde vara problemet avinstallerade jag den globala versionen av TypeScript.

När jag kontrollerar alla globala paket med npm list -g --depth 0 får jag följande:

Jag vet inte om det skulle vara relaterat till problemet.

Svar #1

Det som fungerade för mig var på .eslintrc i mappen du är i att lägga till:

parserOptions: {
   project: 'tsconfig.json',
   tsconfigRootDir: __dirname // <-- this did the trick for me
}

Svar #2

Jag lägger detta svar här som en idiotsäkerhetsåtgärd. Detta kan också hända om du öppnar projektet i fel mapp. Jag fick detta fel när jag öppnade föräldramappen till projektet istället för själva projektmappen. Jag hade ett projekt i GitLab -> projectFolder och öppnade GitLab. Jag fick felet som sa att tsconfig.json inte kunde läsas.

Svar #3

Jag hade ett mycket liknande problem i mitt delprojekt, vad som löste mitt problem var att ändra parserOptions i mitt delprojekts .eslintrc.json:

  {
      "globals": {
         "__dirname": true
      },
      "overrides": [{
         "parserOptions": {
            "project": "**/tsconfig.json",
            "sourceType": "module"
         },
      }]
  }

Relaterade artiklar