【问题标题】:What is the difference between args and runtimeArgs in VSCode's launch.json?VSCode 的 launch.json 中的 args 和 runtimeArgs 有什么区别?
【发布时间】:2020-10-11 15:46:44
【问题描述】:

launch.json 中的argsruntimeArgs 有什么区别?

// 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 似乎包含argsruntimeArgs 中提供的参数,尽管它也包含一些--debug-brk 参数,这是我不想要的。

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

【问题讨论】:

    标签: node.js visual-studio-code vscode-settings


    【解决方案1】:

    我认为这主要在Node debugging docs中解释:

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

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

    runtimeExecutable 不是您要调试的程序,而是用于运行它的可执行文件。 所以看来runtimeArgsruntimeExecutable,因为args 是@987654327 @。

    如果您对它的详细工作原理感兴趣,here's debugAdapter.ts 实现的相关部分。

    【讨论】:

    • 无论我将"x" 参数放在"runtimeArgs": ["run-script", "start", "x" ] 还是"args": [ "x" ] 中,我都看不出有什么区别,它会导致相同的结果:node run-script start x。那么,有什么区别呢?
    【解决方案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(对应于type)和

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

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

    【讨论】:

    • 对我来说,在 npm 脚本中添加标志“--experimental-worker”并忘记添加到 lunch.json 节点配置后,在调试开始时 vscode 调试崩溃 - 将此添加到 runtimeArgs 数组修复它。
    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多