【问题标题】:Can I run/debug Heroku Node.js app locally with VSCode?我可以使用 VSCode 在本地运行/调试 Heroku Node.js 应用程序吗?
【发布时间】:2016-10-20 19:40:55
【问题描述】:

TL;博士

Microsoft VSCode v1.6.1 上,如何:

  1. 正确设置运行时可执行文件?
  2. 正确传递Heroku arguments?
  3. 运行Heroku Node.js 应用程序?
  4. 调试Heroku Node.js 应用?

详情

我创建了一个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 环境变量)。

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

【问题讨论】:

    标签: node.js heroku visual-studio-code


    【解决方案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 中的播放按钮,并选择“附加到进程”,它应该会调试您的进程。

    【讨论】:

    • 出现此错误:连接 ECONNREFUSED 127.0.0.1:5858。很确定我没有更改任何默认值...我在端口 9000 上运行我的节点进程,但这不是调试器进程。
    • 清晰简洁的解释为我排序!只是为像我这样的幼稚节点用户添加一点说明:将 --inspect 参数添加到 Procfile 意味着当 Node 应用程序启动在不同端口上运行的附加 Node 进程时,可以附加通过调试器,旋转起来。我的 web 应用在 8080 端口上运行,额外的调试过程是 9229。
    【解决方案2】:

    以下解决方案对我有用。 在我的 package.json “脚本”中,我添加了:

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

    然后,在 launch.json 中,我在默认的“通过 NPM 启动”配置中添加了一个 envFile 条目,现在看起来像这样:

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

    上述解决方案使 VSCode 调试器能够通过 npm 脚本运行我的服务器,并且我的服务器使用 .gitignore 的 .env 文件中设置的环境变量运行,就像在“常规”Heroku node.js workflow 中一样。

    【讨论】:

      【解决方案3】:

      我为此苦苦挣扎,因为某种原因所提出的解决方案对我不起作用。但是,一个替代解决方案这样做了,所以我想我会分享。

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

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

      【讨论】:

        猜你喜欢
        • 2013-03-06
        • 2017-04-19
        • 2017-12-18
        • 2012-01-28
        • 1970-01-01
        • 2012-12-31
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        相关资源
        最近更新 更多