Точки останова VSCode отключены (выделены серым цветом) при работе с Typescritp и Serverless Offline

Я разрабатываю некоторые лямбда-функции с использованием serverless-framework. Каркас без обслуживания был установлен во всем мире.

Я использую Typescript и serverless-webpack.

Я также использую serverless-offline для тестирования локально.

Все работает нормально, за исключением случаев, когда я пытаюсь отладить из VSCode. Проблема в том, что, как только я запускаю автономный сервер из средства отладки VSCode, все мои точки останова становятся серыми.

Здесь мои файлы конфигурации

package.json

{
  "name": "backend-serverless",
  "version": "1.0.0",
  "description": "serverless backend",
  "main": "handler.js",
  "scripts": {
    "test": "mocha -r ts-node/register transform/src/**/*.spec.ts src/**/**/*.spec.ts",
    "tsc": "tsc",
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@types/aws-lambda": "0.0.34",
    "@types/chai": "^4.1.2",
    "@types/mocha": "^5.0.0",
    "@types/node": "^9.6.0",
    "chai": "^4.1.2",
    "mocha": "^5.0.5",
    "serverless-offline": "^3.18.0",
    "serverless-webpack": "^5.1.1",
    "ts-loader": "^4.1.0",
    "ts-node": "^5.0.1",
    "typescript": "^2.7.2",
    "webpack": "^4.3.0"
  }
}

webpack.config.ts

const path = require('path');
const slsw = require('serverless-webpack');

module.exports = {
  devtool: 'source-map',
  entry: slsw.lib.entries,
  resolve: {
    extensions: [
      '.js',
      '.json',
      '.ts',
      '.tsx'
    ]
  },
  output: {
    libraryTarget: 'commonjs',
    path: path.join(__dirname, '.webpack'),
    filename: '[name].js'
  },
  target: 'node',
  module: {
    rules: [
      {
        test: /\.ts(x?)$/,
        use: [
          {
            loader: 'ts-loader'
          }
        ],
      }
    ]
  }
};

launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Current TS File",
            "type": "node",
            "request": "launch",
            "args": ["${relativeFile}"],
            "runtimeArgs": ["--nolazy", "-r", "ts-node/register"],
            "sourceMaps": true,
            "cwd": "${workspaceRoot}",
            "protocol": "inspector"
        },
        {
            "type": "node",
            "request": "launch",
            "name": "Debug - Offline",
            "program": "/usr/local/bin/serverless",
            "args": [
              "offline",
              "start",
              "--lazy"
            ],
            "env": {
              "NODE_ENV": "development"
            },
            "outFiles": [
                "${cwd}/.webpack/**/*"
            ],
            "sourceMaps": true,
            "cwd": "${workspaceRoot}",
            "protocol": "inspector"
        }
    ]
}

tsconfig.json

{
    "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "outDir": "dist",
    "sourceMap": true
  },
  "include": [
    "src/**/*.ts", "*.ts"
  ],
  "exclude": [
    "node_modules"
  ],
  "typeRoots": [
    "node_modules/@types"
  ],
  "lib": [
    "es2016",
    "dom"
  ]
}

Кстати, если я попытаюсь отладить любую обычную функцию, написанную на Typescript, используя Current TS File запустить конфигурацию, все мои контрольные точки работают отлично. Если я использую Debug - Offline Запустите конфигурацию, тогда все точки останова станут серыми.

1 ответ

Я считаю, что это (недавно представленная) ошибка в VSCode.

Доказательства

Я использую serverless-webpack а также serverless-offline с лямбда-функциями Typescript на несколько месяцев. Отладка с настройкой, очень похожей на вашу, никогда не была проблемой до недавнего времени.

Описанные вами симптомы легко воссоздать с помощью нового проекта, созданного

serverless create --template aws-nodejs-typescript

(плюс два плагина), используя последний VSCode (1.21.1).

Временное решение

Я не использую React Native, но обходной путь, описанный в этом выпуске, работает для меня. После запуска отладчика, когда все точки останова выделены серым цветом, добавьте новую точку останова или удалите и повторно добавьте существующую точку останова. Кажется, что любое действие "пробуждает" отладчик, а остальные точки останова связываются.

Недавно представленный?

Я откатил свой VSCode до 1.18.1, и проблема исчезла. Затем я прошел серию обновлений и убедился, что версии 1.19.3 и 1.20.1 также работают нормально.

Версия 1.21.1, кажется, единственная, которая страдает от этой ошибки. Поэтому, если обходной путь не работает для вас или вы не хотите его использовать, откат к VSCode 1.20.1 (или более ранней версии) может решить вашу проблему.

Заметки

launch.json Конфигурация, которую я использую для этой настройки, довольно минимальна и обычно выглядит так:

{
    "type": "node",
    "request": "launch",
    "name": "Debug API Gateway",
    "program": "${workspaceFolder}/node_modules/serverless/bin/serverless",
    "args": [
        "offline",
        "start"
    ]
}

Эта конфигурация всегда работала для меня; Мне никогда не приходилось указывать такие вещи, как outFiles или же sourceMaps чтобы отладка работала с машинописью, serverless-offline а также serverless-webpack,