Каков правильный способ отладки npm script с помощью vscode?

У меня есть npm script, который я пытаюсь отлаживать. Я использую vscode, поэтому я решил создать конфигурацию отладки и выполнить ее с помощью отладчика.

Мой номер npm script выглядит следующим образом:

"scripts": {
    ...
    "dev": "node tasks/runner.js",
}

Итак, я создал следующую конфигурацию отладки:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "runtimeExecutable": "npm",
            "cwd": "${workspaceRoot}",
            "runtimeArgs": [
                "run", "dev"
            ],
            "port": 5858,
            "stopOnEntry": true
        }
    ]
}

И когда я запускаю его, запускается script, но vscode никогда не может подключиться, и я получаю сообщение об ошибке:

Невозможно подключиться к runtime через протокол 'legacy'; рассмотрите использование протокола "инспектор" (время ожидания после 10000 мс).

Я попытался добавить протокол инспектора:

       {
            "type": "node",
            "request": "attach",
            "name": "Attach (Inspector Protocol)",
            "port": 9229,
            "protocol": "inspector"
       }

И запустите npm script с помощью:

npm run dev --inspect

И на этот раз я получаю сообщение об ошибке:

Убедитесь, что Node запущен с --inspect. Не удается подключиться к процессу выполнения, время ожидания после 10000 мс - (причина: не удается подключиться к цели: подключите ECONNREFUSED 127.0.0.1:9229).

Я не уверен, какую часть мне не хватает.

Изменить для каждого повторяющегося тега

Я вижу другой вопрос: отладка npm script через vscode, но детали в других вопросах и ответах не такие детализированные и конкретные. Если кто-то ищет конкретные сообщения об ошибках vscode, на которые я наткнулся, или тип конфигурации, которые у меня были, они не обязательно получат подробный ответ на уровень, который дает этот вопрос, выбранный вами.

Ответ 1

Не следует пытаться отлаживать npm script, потому что вы действительно хотите подключить свой отладчик к script, который запускается с помощью команды npm run (NPM здесь используется только как бегун задачи).

{
  "version": "0.2.0",
  "configurations": [
      {
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "program": "${workspaceRoot}/tasks/runner.js"
      }
  ]
}

Если вы действительно хотите запустить его с помощью npm script, вы можете использовать следующую конфигурацию:

{
  "type": "node",
  "request": "launch",
  "name": "Launch via NPM",
  "runtimeExecutable": "npm",
  "windows": {
    "runtimeExecutable": "npm.cmd"
  },
  "runtimeArgs": [
    "run-script",
    "dev"
  ],
  "port": 5858
}

но вы также должны изменить свою команду script (указать порт отладки)

  "scripts": {
    "dev": "node --nolazy --debug-brk=5858 tasks/runner.js"
  },

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

введите описание изображения здесь

Подробнее о Node.js отладке можно найти в Документация VS-кода.