23

launch.jsonargs和in 有什么区别?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]which get me arg2,所以当我运行时npm start,我的应用程序按预期工作。

当我从 VSCode 运行应用程序时,它没有,原因是我没有在launch.json. 我应该把这些论点放在哪里?process.argv似乎包含其中提供的论点,args或者runtimeArgs尽管它也包含一些--debug-brk我不想要的论点。

process.argv当我从命令行 ( npm start) 运行应用程序或从 VSCode 启动它时,我希望能够始终如一地使用。

4

2 回答 2

15

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

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

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

runtimeExecutable不是您要调试的程序,而是用于运行它的可执行文件。所以看起来runtimeArgs就是runtimeExecutable这样。argsprogram

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

于 2017-02-13T15:48:49.470 回答
3

如果您删除属性“程序”,则参数会一个接一个地附加,您看不到任何区别。

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

         {
            
           "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后面(对应于type)和

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

如果您删除属性“程序”,则参数会一个接一个地附加,您看不到任何区别。

于 2019-08-16T09:03:41.353 回答