首页 文章

我可以使用VSCode在本地运行/调试Heroku Node.js应用程序吗?

提问于
浏览
3

TL; DR

Microsoft VSCode v1.6.1,如何:


详情

我创建了一个Heroku Node.js应用程序,它使用CLI命令启动:

heroku local web

并成功从5000端口开始 .

我正在尝试使用Microsoft Visual Studio Code调试它,使用以下launch.json配置:

{
    "name": "Launch",
    "type": "node",
    "request": "launch",
    "program": "${workspaceRoot}/app.js",
    "stopOnEntry": false,
    "args": [],
    "cwd": "${workspaceRoot}",
    "preLaunchTask": null,
    "runtimeExecutable": "/usr/local/bin/heroku",
    "runtimeArgs": [
        "local web",
    ],
    "env": {
        "NODE_ENV": "development"
    },
    "console": "internalConsole",
    "sourceMaps": false,
    "outFiles": []
}

但VSCode自动将 --debug-brk 参数传递给heroku,导致错误:

/usr/local/bin/heroku --debug-brk=23080 'local web' app.js 
    !    `--debug-brk=23080` is not a heroku command.
    !    See `heroku help` for a list of available commands.

VSCode也没有找到没有完整路径的heroku命令(似乎它没有加载 PATH 环境变量) .

有关如何设置编辑器的任何想法?

3 回答

  • 1

    以下解决方案适合我:

    1)在procfile中,将参数--debug添加到节点进程

    web: node --debug server.js
    

    默认情况下,调试器侦听端口5858

    2)运行节点进程后,打开VSCode并将以下配置添加到launch.json文件中

    {
     "type": "node",
     "request": "attach",
     "name": "Attach to Process",
     "port": 5858
    }
    

    3)最后,单击VSCode中的播放按钮,选择“附加到进程”,它应该调试您的进程 .

  • 1

    由于某些原因,我提出的解决方案对我不起作用,因此我很挣扎 . 但是,另一种解决方案确实如此,我想我会分享 .

    从VS Code的默认调试选项中选择 Attach by Process ID

    当您使用此配置启动调试器时,它应列出要附加到的可用进程,其中一个应该只是server.js . 这需要每次手动附加,如果其他自动附件适合您,可能会更好,但这仍然是一个可行的解决方案 .

  • 3

    以下解决方案对我有用 . 在我的package.json“脚本”中,我补充说:

    "debug": "node --inspect-brk server.js"
    

    然后,在launch.json中我添加了一个envFile条目到默认的"Launch via NPM"配置,现在看起来像这样:

    {
            "type": "node",
            "request": "launch",
            "name": "Launch via NPM",
            "runtimeExecutable": "npm",
            "runtimeArgs": [
                "run-script",
                "debug"
            ],
            "port": 9229,
            "envFile": "${workspaceFolder}/.env"
    }
    

    上述解决方案使VSCode调试器能够通过npm脚本运行我的服务器,并且我的服务器使用我的.gitignore'd .env文件中设置的env vars运行,就像在"regular" Heroku node.js workflow中一样 .

相关问题