可以将Visual Studio代码配置为使用nodemon启动

时间:2015-12-24 09:10:59

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

我在我的系统中安装了nodemon作为全局包。 它在我在cmd中执行nodemon时有效。

但是当我使用带有此launch.json文件的vscode时,vscode会抛出此异常:

  

请求启动:运行时可执行文件XXX \ XXX \ XXX \ XXX \ nodemon不存在

launch.json是:

{
"version": "0.2.0",
"configurations": [
    {
        "name": "Launch",
        "type": "node",
        "request": "launch",
        "program": "app.js",
        "stopOnEntry": false,
        "args": [],
        "cwd": ".",
        "runtimeExecutable": nodemon,
        "runtimeArgs": [
            "--nolazy"
        ],
        "env": {
            "NODE_ENV": "development"
        },
        "externalConsole": false,
        "preLaunchTask": "",
        "sourceMaps": false,
        "outDir": null
    },
    {
        "name": "Attach",
        "type": "node",
        "request": "attach",
        "port": 5858
    }
]
}

当我删除runtimeExecutable中的nodemin时,它与节点

完美匹配

12 个答案:

答案 0 :(得分:37)

首先,将nodemon安装为dev依赖项:

npm install --save-dev nodemon

对于较新版本的VS Code ,请设置.vscode/launch.json这样的文件:

{
    "version": "0.2.0",
    "configurations": [
    {
        "type": "node",
        "request": "launch",
        "name": "nodemon",
        "runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
        "program": "${workspaceFolder}/app.js",
        "restart": true,
        "console": "integratedTerminal",
        "internalConsoleOptions": "neverOpen"
    }]
}

最重要的部分是runtimeExecutable属性,它指向nodemon脚本和指向入口点脚本的program属性。

如果您使用较旧的VS代码(您不应该使用),请尝试此启动配置:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch with nodemon",
      "type": "node",
      "request": "launch",
      "program": "${workspaceRoot}/node_modules/nodemon/bin/nodemon.js",
      "args": ["${workspaceRoot}/app.js"],
      "runtimeArgs": ["--nolazy"]
    }
  ]
}

最重要的部分是program属性,它指向nodemon脚本和指向正常入口点脚本的args属性。

答案 1 :(得分:23)

我无法得到@AdrianT的答案,附带调试器。似乎有一种更新的内置支持方式来执行此操作:

  1. 打开“启动配置”下拉列表,然后选择“添加配置...”
  2. 选择“Node.js:Nodemon Setup”
  3. 它会在你的launch.json中添加这样的东西:

    {
            "type": "node",
            "request": "launch",
            "name": "nodemon",
            "runtimeExecutable": "nodemon",
            "program": "${workspaceRoot}/app.js",
            "restart": true,
            "console": "integratedTerminal",
            "internalConsoleOptions": "neverOpen"
    }
    

    确保您的“程序”设置是正确的入口点脚本。

    您需要全局安装nodemon才能使其正常工作(npm install -g nodemon)(根据the documentation

    您的应用程序现在运行,您可以设置将被命中的断点,并且控制台会记录到集成终端窗口。

    请注意,终止调试会话只会终止要调试的程序,而不是nodemon本身。要终止nodemon,请在集成终端中按Control-C。

答案 2 :(得分:15)

在Visual Studio代码中创建启动配置:

{
    "name": "Attach",
    "type": "node",
    "request": "attach",
    "port": 5858,
    "restart": true
}

从命令行运行nodemon:nodemon --debug server.js

现在'附加'来自VC和vuala。

答案 3 :(得分:3)

附加绝对是一个简单的选择。为了确保代码中断,请确保使用--inspect-brk(节点8+)运行nodemon,例如:

nodemon --inspect-brk src/app.js

启动nodemon后,将打开端口以进行调试连接:

Debugger listening on ws://127.0.0.1:9229/someUUID

您可以使用该端口来构建启动配置,这非常简单:

{
  "type": "node",
  "request": "attach",
  "name": "Attach",
  "port": 9229,
  "restart": true
},

答案 4 :(得分:2)

我尝试了Adrian和Mathew建议的解决方案。如果您在macOS上(也许也在Linux上),它们似乎可以完美地工作。在Windows上,也许Mathew的解决方案更稳定。结合使用这两种解决方案,它们可以与macOS,Windows和Linux兼容,并确保我们不会遇到诸如“找不到路径”之类的错误,我发现使用全局安装的nodemon进行调试似乎要稳定得多。

  • 全局安装nodemon(如果以前没有安装过的话)npm i -g nodemon
  • 将以下内容添加到.vscode/launch.json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "node",
          "request": "launch",
          "name": "Debug App_Name",
          "skipFiles": [
            "./path/of/file/to/skip/when/debugging"
          ],
          "program": "app.js",
          "restart": true,
          "runtimeExecutable": "nodemon",
          "console": "integratedTerminal"
        }
      ]
    }

我们当然仍然可以在本地安装nodemon并在开发时运行它。

答案 5 :(得分:1)

不,目前还不能。但是我设法使用nodemon来解决这个问题。我是从Grunt开始的。但是等效的命令行也应该这样做。

编辑:经过一个晚上的测试后,我可以说下面的方法仍然有些松懈:S,无法连接失败,有时会忽略断点。

EDIT2 :您还可以使用['--debug-brk=5860']nodeArgs在Gruntfile中指定非默认调试端口。我还被建议使用--debug-brk代替--debug。也许这将消除目前的诡异。我会回来提一下它是否有帮助(我目前正在切换项目)。

如果这可能有助于任何人在Windows 10上使用当前VS代码版本中的以下设置(例如v0.10.6),但它也可能在Mac上工作(我可能稍后再查看)。但请注意,我有时必须通过在调试器选择之前更改+保存文件来触发重建。

/.vscode/launch.json

{
"configurations": [{
    "name": "Launch",
    "outDir": null

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

}

/Gruntfile.js

nodemon : {
    dev : {
    script : 'launcher.js'
    },
    options : {
        ignore : ['node_modules/**', 'Gruntfile.js'],
               nodeArgs: ['--debug'],
        env : { PORT : '4123'
        }
    }
}

我想调试端口5858是默认值,因为它未在此处指定(注意它在上面的launch.json中。)

答案 6 :(得分:0)

是的,你可以!从最近的更新开始,您可以将调试器附加到正在运行的Nodemon进程。 This page has more information。在页面上搜索nodemon以查看说明。

答案 7 :(得分:0)

我使用Node Exec插件。它允许您通过按F8和F9(在编辑器中的打开文件上应用)在vcs中运行和停止节点应用程序。这可能有助于(临时)解决方法。

答案 8 :(得分:0)

https://github.com/Microsoft/vscode-recipes/tree/master/nodemon

以上链接帮助我成功调试了nodemon + express应用程序。在那里对步骤进行了很好的解释。

launch.json

git commit

}

npm脚本

{
"version": "0.2.0",
"configurations": [
    {
        "type": "node",
        "request": "attach",
        "name": "Node: Nodemon",
        "processId": "${command:PickProcess}",
        "restart": true,
        "protocol": "inspector",
    }
]

步骤:

  1. 使用npm脚本运行服务器。请注意--insert arg in 脚本
  2. 启动可视代码调试器,将显示提示 选择节点服务器进程
  3. 选择节点服务器进程

现在您应该可以进行调试了。

如果它没有帮助您,请查看官方文档,其中介绍了配置选项。 https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_launch-configuration-support-for-npm-and-other-tools

答案 9 :(得分:0)

Nodemon作为本地依赖项

我也无法立即获得@Adrian T的答复。但这只是一个很小的细节,必须对其进行更改以使其起作用。所以我们开始:

  1. 在顶级 .vscode 文件夹中创建 launch.json 文件
  2. 在VS Code中打开文件
  3. 使用将在编辑器中呈现的内置按钮添加配置-为 Node.js:Nodemon设置
  4. 添加配置
  5. 在生成的配置中,更改键 runtimeExecutable
"program": "${workspaceFolder}/app.js",

// diff from Adrian T
-- "runtimeExecutable": "${workspaceFolder}/node_modules/nodemon/bin/nodemon.js",
++ "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/nodemon",

您现在正在使用本地依赖项中的可执行文件(请参阅此SO thread

在此answer的下面,马丁也提供了一个答案(请正确回答):

如果您不想运行全局nodemon,也可以使用npm安装nodemon,然后设置“ runtimeExecutable”:“ $ {workspaceFolder} /node_modules/.bin/nodemon”,– Martin 18年2月22日, 22:25

Nodemon作为全局依赖项

"runtimeExecutable": "nodemon",仅在 nodemon 的可执行文件本身是环境变量 PATH 的一部分(而不是`%appdata%等)的情况下才能工作。由于大多数情况并非如此,因此您需要指定绝对路径(请参阅文档herehere)。

答案 10 :(得分:0)

对于任何试图在Windows上使用express-generator创建的ExpressJS项目来设置nodemon的人来说,当nodemon作为本地开发依赖项安装时(例如npm install nodemon --save-dev),这对我来说就是有效的

{
    "type": "node",
    "request": "launch",
    "name": "Launch with Nodemon",
    "runtimeExecutable": "node",
    "runtimeArgs": ["${workspaceFolder}/node_modules/nodemon/bin/nodemon.js"],
    "skipFiles": [
        "<node_internals>/**"
    ],
    "program": "${workspaceFolder}\\bin\\www",
    "env" : {
        "DEBUG": "myapp:server"
    }
}

答案 11 :(得分:0)

什么对我有用没有全局安装和使用打字稿:

{
    "console": "integratedTerminal",
    "internalConsoleOptions": "neverOpen",
    "name": "nodemon",
    "program": "${workspaceFolder}/src/index.ts",
    "request": "launch",
    "restart": true,
    "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/nodemon",
    "type": "pwa-node",
    "args": ["--config", "nodemon.json"] //remove --config if you don't have one
}

为了不让 ts-node 出现问题,我在 nodemon.json 中添加了它:

{
    "execMap": {
        "ts": "npx ts-node"
    }
}