Visual Studio Code не будет правильно наступать на код TypeScript - PullRequest
6 голосов
/ 12 апреля 2020

Я пытаюсь настроить код Visual Studio для использования TypeScript (в пакете Node), я также использую ts-jest / Jest для создания тестов, кроме того, у меня установлено расширение Jest.

Мне удалось выяснить, как заставить работать точки останова, но теперь я замечаю, что не могу правильно добавить свой код, я даже не уверен на 100%, что точки останова работают идеально.

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

РЕДАКТИРОВАТЬ: На самом деле, шагание иногда останавливается снова, но на том, что кажется js код из реализации (например, console.log переходит к коду, связанному с ведением журнала, но никогда больше не повторяет мой код)

РЕДАКТИРОВАТЬ # 2: При попытке воспроизвести проблему с помощью В более простом проекте я понимаю, что больше не импортирую библиотеку, которую я использую (Phaser), чтобы решить проблему, надеюсь, это поможет определить причину проблемы.

РЕДАКТИРОВАТЬ # 3: Вот ссылка на что-то, что воспроизводит проблему, о которой я говорю: https://github.com/adtrevor/VSCodeDebugIssue Если вы хотите проверить это, просто клонируйте его, npm install и запустите задачу «Отладка Jest Tests» из панель запуска / отладки. Установите точку останова на line 23 из hey.ts (первая инструкция barFunction()), отладчик остановится на этом, но если вы войдете в код, вы должны заметить, что в какой-то момент вы покидаете текущую область (после выполнения * 1028) * в моем случае) и никогда не возвращайтесь к нему.

РЕДАКТИРОВАТЬ # 4: Вот более полный пример, показывающий проблему https://github.com/adtrevor/TSVSCodeSOQuestion/. Если вы клонируете его, устанавливаете зависимости и устанавливаете точку останова в строке 156 файла ChunkManager.ts, вы заметите, что степпинг не работает должным образом, даже если я применил изменения @GiacomoDeLiberali. Возможно, ошибка связана с этим.

Я вообще не знаю, что не так с конфигурацией или где искать в первую очередь, поскольку у меня нет другого сообщения об ошибке, касающегося отладки. Вот содержимое моих файлов конфигурации:

launch. json

{
  // Use IntelliSense to learn about possible Node.js debug attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Debug Jest Tests",
      "cwd": "${workspaceFolder}",
      "args": [
        "--inspect-brk",
        "${workspaceRoot}/node_modules/.bin/jest",
        "--runInBand",
        "--config",
        "${workspaceRoot}/jest.config.js"
      ],
      "windows": {
        "args": [
          "--inspect-brk",
          "${workspaceRoot}/node_modules/jest/bin/jest.js",
          "--runInBand",
          "--config",
          "${workspaceRoot}/jest.config.json"          
        ],
      },
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
    },
  ]
}

settings. json

{
    "editor.fontSize": 14,
    "workbench.colorTheme": "Default Light+",
    "window.autoDetectColorScheme": true,
    "debug.node.autoAttach": "off",
    "jest.pathToConfig": "./jest.config.js",
}

jest.config. json

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
  rootDir: './src/'
};

tsconfig. json

{
    "compilerOptions": {
        "target": "es6",
        "module": "CommonJS",
        "strict": true,
        "noImplicitAny": true,
        "allowJs": true,
        "jsx": "preserve",
        "importHelpers": true,
        "moduleResolution": "node",
        "experimentalDecorators": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "sourceMap": true,
        "baseUrl": "./src",
        "noEmit": false,
        "outDir": "./build/",

        "paths": {
          "~/*": ["./*"]
        },
        "typeRoots": [
            "node_modules/@types",
            "node_module/phaser/types"
        ],
        "types": [
            "phaser",
            "jest"
        ]
    },
    "include": [
        "src/**/*"
    ]
}

И наконец мой Пакет. json:

{
    "name": "mypackagename",
    "description": "Client for the game",
    "version": "0.1.0",
    "dependencies": {
        "phaser": "^3.22.0",
        "tslib": "^1.11.1"
    },
    "devDependencies": {
        "@types/jest": "^25.2.1",
        "bufferutil": "^4.0.1",
        "canvas": "^2.6.1",
        "jest": "^25.2.7",
        "ts-jest": "^25.3.1",
        "typescript": "^3.8.3",
        "utf-8-validate": "^5.0.2"
    }
}

Видите ли вы что-нибудь необычное в этом конфиге? Вообще, что может быть причиной такого поведения?

1 Ответ

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

Я клонировал репозиторий, который вы опубликовали, и это известная проблема кода VS.

Попробуйте добавить эти строки в ваш launch.json:

      "smartStep": true, 
      "skipFiles": [
        "<node_internals>/**",
        "node_modules/**"
      ]

smartStep : автоматический переход по сгенерированному коду, который не может быть отображен обратно в исходный источник.

skipFiles : массив шаблонов глобуса для файлов, пропускаемых при отладке .

Я создал pull-запрос .

debug from VS Code

...