Запуск проекта NodeJS в коде Visual Studio с пряжей

У меня есть проект NodeJS, который я могу запустить из командной строки с помощью команды yarn start. Мой package.json выглядит примерно так:

{
  "name": "projectname",
  "version": "0.0.1",
  "description": "",
  "author": "My Name",
  "license": "",
  "scripts": {
    "start": "yarn dev",
    "dev": "yarn stop && pm2 start pm2-dev.yaml && webpack-dev-server --progress",
    "prod": "yarn stop && yarn build && pm2 start pm2-prod.yaml",
    "build": "rimraf dist lib && babel src -d lib --ignore test.js && cross-env NODE_ENV=production webpack -p --progress",
    "stop": "rimraf logs/* && pm2 delete all || true"
  },
  "dependencies": {
    "body-parser": "~1.16.0",
    "ejs": "2.5.5",
    "express": "^4.14.1",
    "pg": "^6.1.2",
    "react": "^15.4.2",
    "redux": "^3.6.0",
  },
  "devDependencies": {
    "babel-cli": "^6.22.2",
    "cross-env": "^3.1.4",
    "eslint": "^3.13.0",
    "pm2": "^2.3.0",
    "redux-mock-store": "^1.2.2",
    "rimraf": "^2.5.4",
    "webpack": "^2.2.1",
    "webpack-dev-server": "^2.2.1"
  }
}

Я пытаюсь запустить этот проект в режиме отладки с помощью Visual Studio Code, но почти не повезло. Я определил конфигурацию запуска в файле VS Code 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": "yarn",
      "runtimeExecutable": "yarn",
      "runtimeArgs": [
        "start"
      ],
      "port": 5858,
      "cwd": "${workspaceRoot}",
      "timeout": 10000
    }
  ]
}

Проблема с этой конфигурацией заключается в том, что она обычно webpack-dev-server, поскольку webpack-dev-server больше 10 секунд. Я могу увеличить timeout в своей конфигурации, но я заметил, что VS Code приводит к сообщению Cannot connect to runtime process (timeout after 30000 ms). удается Cannot connect to runtime process (timeout after 30000 ms). в конце концов, поэтому я предполагаю, что это нехорошее решение. Кроме того, мои точки останова игнорируются с помощью такой конфигурации, которая говорит мне, что я определенно делаю что-то неправильно здесь.

Это первый раз, когда я пытаюсь использовать Visual Studio Code, и я обычно не использую NodeJS, но я получил этот проект со всеми этими скриптами в package.json уже был определен, поэтому я пытаюсь принять его, и поэтому вся путаница о том, как правильно запустить его.

Может ли Visual Studio Code запускать такой проект с полной функциональностью отладки вообще, и если да, то как мне настроить сценарий запуска?

Ответы

Ответ 1

Я не могу конкретно ответить на части вопроса, связанные с веб-пакетом. Однако ваш скрипт выше не будет работать, потому что вы не включили отладку. Открытая отладка позволяет отладчику подключаться к этому процессу, а также блокирует выполнение программы до тех пор, пока не подключится отладчик. Вам нужно будет сделать еще один скрипт в вашем package.json, который позволяет отлаживать. Затем вы можете использовать свой отладочный скрипт для отладки и ваш не отладочный скрипт для нормальной работы. Например:

  "scripts": {
    "start": "yarn dev",
    "dev": "node entry.js",
    "dev-debug": "node --inspect-brk=5858 entry.js",

Затем в файле launch.json замените "start" на "dev-debug". Порт отладки уже установлен на 5858 в файлах launch.json и package.json, так что это должно работать. Ключ запускает узел с помощью команды --inspect-brk, заставляющей выполнение приложения узла останавливаться, пока к нему не подключится отладчик.

Ответ 2

Я launch.json следующую конфигурацию в launch.json:

{
    "type": "node",
    "request": "launch",
    "name": "Launch via Yarn",
    "runtimeExecutable": "yarn",
    "cwd": "${workspaceFolder}",
    "runtimeArgs": ["start:debug"],
    "port": 5858
}

И следующая запись в свойстве scripts внутри package.json:

"start:debug": "node --inspect-brk=5858 ./server/index.js",

Вы можете включить ключ timeout (по умолчанию 10000) и увеличить его значение, если в вашем package.json сценарий prestart:debug что может привести к задержке запуска реального приложения узла.

Ответ 3

Не использовали отлаживаемый код VS, но я использую nodemon для отладки с Chrome с помощью сценария shell.

bin_dir="$__dirname/../node_modules/.bin"
src_dir="$__dirname/../src"

"$bin_dir/nodemon" --ext js,yaml \
    --watch "$src_dir/package.json" \
    --watch "$src_dir" \
    "$src_dir/index.js" \
    --exec "yarn && babel-node --inspect=0.0.0.0:9229"

Откройте chrome://inspect/#devices и запустите ваш отладчик