在VSCode的launch.json中,args和runtimeArgs有什么区别?

pus*_*kin 12 node.js visual-studio-code vscode-settings

是什么区别args,并runtimeArgs在launch.json?

// Optional arguments passed to the runtime executable
"runtimeArgs": []
// Command line arguments passed to the program
"args": []
Run Code Online (Sandbox Code Playgroud)

该程序与运行时可执行文件不同吗?

问题背后的额外信息和动机:

我正在开发一个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启动它.

Gam*_*a11 7

我认为这主要在Node调试文档中进行了解释:

您可以直接从启动配置中使用“ npm”脚本或其他任务运行器工具,而不是直接通过node启动Node.js程序:

  • PATH上可用的任何程序(例如“ npm”,“ mocha”,“ gulp”等)都可以用于runtimeExecutable属性[...]

runtimeExecutable不是要调试的程序,而是用于运行它的可执行文件。如此觉得这runtimeArgsruntimeExecutableargsprogram

如果您对它的详细工作方式感兴趣,这里是实现的相关部分debugAdapter.ts


Ste*_*fan 6

如果删除属性“程序”,参数将依次附加,并且您看不到任何差异。

考虑以下示例,包括“类型”“程序”:

         {
            
           "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
        }
Run Code Online (Sandbox Code Playgroud)

=> 设置“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后面(对应于type)并且

  • arg --runInBand”出现在 jest.js后面(对应于program

如果删除属性“程序”,参数将依次附加,并且您看不到任何差异。