Почему VS-код не соблюдает пути машинописного текста?

#node.js #typescript #jasmine #tsconfig #ts-node

Вопрос:

В моем проекте TypeScript, в котором выполняются тесты через ts-узел и jasmine, я определил некоторые пути в 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"
  ]
}
 

Я могу импортировать по путям @common и @crashes в своем производственном коде, но по какой-то причине VS Code выдает мне ошибку Cannot find module '@common' or its corresponding type declarations. в моих файлах spec.ts.

Как я могу заставить VS-код распознавать пути машинописи в моих тестах?

Ответ №1:

Это связано с тем, что intellisense VS Code будет следовать правилам в tsconfig.json . В данном случае я не включал spec.ts файлы в компиляцию машинописного текста. Кроме того, я не хотел включать файлы машинописного текста в выходные данные сборки моего проекта.

Решение было следующим:

  1. Удалите files свойство из tsconfig.json
  2. Введите новое tsconfig.dist.json , расширяющее tsconfig.json и добавляющее files свойство здесь
 {
    "extends": "./tsconfig.json",
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "outDir": "./dist/cjs",
    },
    "files": [
        "./src/index.ts"
    ]
  }
 
  1. Используйте новое tsconfig.dist.json в сценарии публикации

Кроме того, как только я сделал все это, я получил следующую ошибку, когда попытался запустить тесты jasmine с помощью ts-узла:

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

Error: Cannot find module '@common'
 

Решением этой ошибки была установка tsconfig-путей и обновление моего test сценария в package.json

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