Функции языка Vscode TS недоступны, когда тесты / ** не включены в tsconfig - PullRequest
0 голосов
/ 31 марта 2020

Я бы хотел, чтобы мои тесты машинописи получали linting, автозавершение кода, vscode intellisense (функции языка ts), когда папка test находится рядом с src. Я НЕ хочу, чтобы тесты переносились при сборке моего проекта машинописи.

Мой проект узла машинописи структурирован так:

.    
├── server
│   │ 
│   │    
│   ├── src
│   │   │
│   │   └── app.ts
│   ├── test
│   │   │
│   │   └── app.test.ts
│   ├── node_modules/
│   ├── package-lock.json
│   ├── package.json
│   ├── tslint.json
│   └── tsconfig.json
├── front_end/
└── README.md

С моим tsconfig:

{
  "compilerOptions": {
    "baseUrl": ".",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist",
    "sourceMap": true,
    "strict": true,
    "target": "ESNext",
    "paths": {
      "*": ["node_modules/*"]
    }
  },
  "include": ["src/**/*"]
}

Когда я перехожу к моим тестовым файлам в vscode, функция языка vscode не распознает типы и пакеты, установленные в node_modules. Удивительно, но если я открою vscode только в папке сервера (как вы можете видеть из моей структуры папок, сервер не является root), языковые функции работают ?.

Тесты используют ts-jest для запуска так tsc здесь не нужен. Было бы лучше продлить tsconfig.json для тестов ??

Это то, что можно исправить в настройках, или я должен сообщить об ошибке в https://github.com/microsoft/vscode/issues/new/choose.

Ответы [ 3 ]

0 голосов
/ 31 марта 2020

Да, вы можете расширить свой tsconfig, чтобы у вас был общий, рабочий и опытный. В нашем случае это так:

tsconfig.common. json - содержит все параметры, общие для разработки и производства.

tsconfig. json - версия для разработки, включающая тесты :

{
    "extends": "./tsconfig.common",
    "exclude": ["bin", "node_modules"]
}

tsconfig.prod. json - производственная версия, исключающая тесты.

{
    "extends": "./tsconfig.common",
    "exclude": ["bin", "node_modules", "tests", "**/*.spec.ts"]
}

Затем с нашим webpack.config мы имеем аналогичную настройку:

webpack.common. js - содержит все настройки, общие для разработки и производства

webpack.dev. js - используйте разработку tsconfig:

rules: [
        {
            test: /\.ts$/,
            exclude: [/bin/, /node_modules/],
            include: /ClientApp/,
            loader: 'ts-loader',
            options: {
                appendTsSuffixTo: [/\.vue$/],
                configFile: 'tsconfig.json'
            }
        }
    ]

webpack .prod. js - использует производственный tsconfig:

rules: [
        {
            test: /\.ts$/,
            exclude: [/bin/, /node_modules/],
            include: /ClientApp/,
            loader: 'ts-loader',
            options: {
                appendTsSuffixTo: [/\.vue$/],
                configFile: 'tsconfig.prod.json'
            }
        }
    ]

И, наконец, файл пакета. json содержит следующее в разделе скриптов:

scripts: {
    "dev": "webpack --config webpack.dev.js",
    "build": "webpack --config webpack.prod.js",
}

Надеюсь, что помогает тебе.

0 голосов
/ 11 апреля 2020

Vscode имеет проблему с одним файлом root tsconfig. Соседняя папка test с src будет использовать tsconfig (добавленный в этом запросе ), однако она не будет работать, если открываемая папка находится на один каталог выше нее (например, если у вас есть папка сервера и клиента). В этом выпуске отслеживается решение: https://github.com/Microsoft/vscode/issues/12463.

Кроме того, если вы хотите перейти на eslint (tslint устарела), анализатор машинописного текста также заставит вас добавить файл tsconfig в тестовую папку, если вы хотите sh, чтобы исключить тестовую папку из основного tsconfig. Ссылка на документацию eslint multi tsconfig .

Самое простое решение - использовать два дополнительных tesconfig. Один для линтера tsconfig.eslint.json и один для тестов tsconfig.tests.json. Не элегантно, но лучшего решения в данный момент не существует.

0 голосов
/ 31 марта 2020

У меня нет компьютера, чтобы проверить это, но я думаю, что вам просто нужно добавить следующий код в ваш файл ts json.

"exclude": [
        "node_modules",
        "**/*.test.ts"
    ]

Разбивка: исключить ** все папки / * все файлы ts с .test в них.

если вы не используете node, вы можете пропустить часть node_modules. Но я хочу, чтобы это было в моем ответе, если кто-то, использующий нод, скопирует исключение. По умолчанию node_modules исключены, но добавление большего количества модификаторов может перезаписать это.

удачи.

Надеюсь, это то, что вы ищете.

...