В чем разница между 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

  • runtimeArg "--nolazy" находится позади node.exe (соответствует типу) и

  • arg "--runInBand" находится позади jest.js (соответствует программе)

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