В чем разница между аргументами 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 к программе)

Если вы удалите атрибут "программа", аргументы будут прикреплены за другим, и вы не увидите никакой разницы.

Другие вопросы по тегам