launch.json中的args
和runtimeArgs
有什么区别?
// 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
论点,这是我不想要的。
我希望在从命令行(npm start
(运行应用程序或从VSCode启动应用程序时能够一致地使用process.argv
。
我认为这主要在节点调试文档中进行了解释:
您可以直接从启动配置中使用"npm"脚本或其他任务运行器工具,而不是直接使用 node 启动 Node.js 程序:
- PATH 上可用的任何程序(例如 'npm'、'mocha'、'gulp 等(都可以用于 runtimeExecutable 属性 [...]
runtimeExecutable
不是您要调试的程序,而是用于运行它的可执行文件。因此,似乎runtimeArgs
之于runtimeExecutable
,就像args
之于program
一样。
如果您对它的详细工作原理感兴趣,这里是debugAdapter.ts
实现的相关部分。
如果删除属性"program",则参数将附加一个,并且您看不到任何区别。
请考虑以下示例,包括"类型">和"程序":
{
"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
}
=> set "NODE_ENV=development" && "C:\Program Filesodejsode.exe" --nolazy --inspect-brk=35238 node_modules\jest-cli\bin\jest.js --runInBand
运行时Arg "--nolazy" 发生在节点后面.exe(对应于类型(和
arg "--runInBand" 出现在 jest.js 后面(与程序相对应(
如果删除属性"program",则参数将附加在另一个参数之后,并且看不到任何区别。