В чем разница между args и runtimeArgs в VSCode launch.json?
В чем разница между args
и runtimeArgs
в launch.json?
// Optional arguments passed to the runtime executable
"runtimeArgs": []
// Command line arguments passed to the program
"args": []
Является ли программа не такой же, как исполняемый файл времени выполнения?
Дополнительная информация и мотивация позади вопроса:
Я разрабатываю приложение nodejs. В моем package.json
у меня есть start
script:
"start": "electron ./src/Main/main.js arg2"
, и в моем коде приложения я получаю доступ к process.argv[2]
, который получает меня arg2
, поэтому, когда я запускаю npm start
, мое приложение работает по назначению.
Когда я запускаю приложение из VSCode, однако это не так, и причина в том, что я не поставлял никаких дополнительных аргументов в launch.json
. Где я должен поставить эти аргументы? process.argv
похоже, содержит аргументы, предоставленные либо в args
, либо runtimeArgs
, хотя он также придерживается некоторого аргумента --debug-brk
, который мне не нужен.
Я хочу иметь возможность использовать process.argv
последовательно, когда я запускаю приложение из командной строки (npm start
) или запускаю его из VSCode.
Ответы
Ответ 1
Я думаю, что это в основном объясняется в Документах по отладке узлов:
Вместо того, чтобы запускать программу Node.js напрямую с узла, вы можете использовать сценарии 'npm' или другие инструменты запуска задач непосредственно из конфигурации запуска:
- Любая программа, доступная в PATH (например, "npm", "mocha", "gulp" и т.д.), Может использоваться для атрибута runtimeExecutable [...]
runtimeExecutable
- это не программа, которую вы хотите отлаживать, а исполняемый файл, используемый для ее запуска. Таким образом, получается, что runtimeArgs
- это runtimeExecutable
, как args
- program
.
Если вас интересует, как это работает в деталях, здесь соответствующая часть реализации debugAdapter.ts
.
Ответ 2
Рассмотрим следующий пример:
{
"name": "vscode-jest-tests",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node_modules/jest-cli/bin/jest.js",
"stopOnEntry": false,
"args": [
"--runInBand"
],
"cwd": "${workspaceFolder}",
"preLaunchTask": null,
"runtimeExecutable": null,
"runtimeArgs": [
"--nolazy"
],
"env": {
"NODE_ENV": "development"
},
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"disableOptimisticBPs": true
}
=> установить "NODE_ENV = development" && "C:\Program Files\nodejs\node.exe" --nolazy --inspect-brk = 35238 node_modules\jest-cli\bin\jest.js --runInBand
Если вы удаляете атрибут "программа", аргументы присоединяются за другим, и вы не видите никакой разницы.