В чем разница между аргументами args и runtimeArgs в файле launch.json VSCode?
В чем разница между args
а также runtimeArgs
в launch.json?
// Optional arguments passed to the runtime executable
"runtimeArgs": []
// Command line arguments passed to the program
"args": []
Разве программа не то же самое, что исполняемый файл во время выполнения?
Дополнительная информация и мотивация вопроса:
Я занимаюсь разработкой приложения nodejs. В моем package.json
, У меня есть start
сценарий:
"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:
Вместо запуска программы Node.js напрямую с узла вы можете использовать сценарии 'npm' или другие инструменты запуска задач непосредственно из конфигурации запуска:
- Любая программа, доступная в PATH (например, "npm", "mocha", "gulp" и т. Д.), Может использоваться для атрибута runtimeExecutable [...]
runtimeExecutable
это не программа, которую вы хотите отлаживать, а исполняемый файл, используемый для ее запуска. Итак, похоже, что runtimeArgs
это к runtimeExecutable
как args
это к program
,
Если вы заинтересованы в том, как это работает в деталях, вот соответствующая часть debugAdapter.ts
реализация.
Рассмотрим следующий пример:
{
"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
RuntimeArg "--nolazy" происходит за node.exe (соответствует типу) и
Арг "--runInBand" происходит за jest.js (corresonds к программе)
Если вы удалите атрибут "программа", аргументы будут прикреплены за другим, и вы не увидите никакой разницы.