node.js - Varför respekterar inte VS Code TypeScript-sökvägar?


I mitt TypeScript-projekt som kör tester via ts-node och jasmine har jag definierat några sökvägar i tsconfig.json

{
  "compilerOptions": {
      "baseUrl": "src",
      "target": "es5",
      "module": "commonjs",
      "lib": [
          "es5",
          "es2015",
          "DOM"
      ],
      "moduleResolution": "Node",
      "outDir": "./dist/cjs",
      "declaration": true,
      "sourceMap": true,
      "esModuleInterop": true,
      "forceConsistentCasingInFileNames": true,
      "noImplicitAny": false,
      "removeComments": true,
      "strict": true,
      "paths": {
            "@common": ["common/index"],
            "@crashes": ["crashes/index"]
      }
  },
  "files": [
      "./src/index.ts"
  ]
}

Jag kan importera via vägarna @common och @crashes i min produktionskod, men av någon anledning ger VS Code mig felet Cannot find module '@common' or its corresponding type declarations. i mina spec.ts-filer.

Hur kan jag få VS Code att känna igen TypeScript-sökvägar i mina tester?

Svar #1

Detta beror på att VS Codes intellisense följer reglerna i tsconfig.json. I det här fallet inkluderade jag inte spec.ts-filerna i TypeScript-kompileringen. Dessutom ville jag inte inkludera TypeScript-filerna i mitt projekts byggutdata.

Lösningen var som följer:

  1. Ta bort files-egenskapen från tsconfig.json
  2. Introducera en ny tsconfig.dist.json som utökar tsconfig.json och lägg till files-egenskapen här
{
    "extends": "./tsconfig.json",
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "outDir": "./dist/cjs",
    },
    "files": [
        "./src/index.ts"
    ]
  }
  1. Använd den nya tsconfig.dist.json i publiceringsskriptet

Dessutom, när jag hade gjort allt detta fick jag följande fel när jag försökte köra jasmine-tester med ts-node:

> ts-node node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.spec.json

Error: Cannot find module '@common'

Lösningen på detta fel var att installera tsconfig-paths och uppdatera mitt test-skript i package.json

{
   "scripts": {
        "test": "ts-node -r tsconfig-paths/register node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.spec.json"
    }
}