可以将 Visual Studio Code 配置为使用 nodemon 启动吗

Posted

技术标签:

【中文标题】可以将 Visual Studio Code 配置为使用 nodemon 启动吗【英文标题】:Can Visual Studio Code be configured to launch with nodemon 【发布时间】:2016-03-30 17:51:40 【问题描述】:

我已将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 时,它与 node 完美运行

【问题讨论】:

VS Code 需要“runtimeExecutable”的绝对路径。所以在 OS X 上使用“/usr/local/bin/nodemon”将使启动配置工作。但是,在调试会话结束时,VS Code 将杀死 nodemon,这并不是使用 nodemon 的初衷。这就是为什么下面的答案是更好的方法。 这对我有帮助 :) => github.com/Microsoft/vscode-recipes/tree/master/nodemon 【参考方案1】:

首先,安装 nodemon 作为开发依赖:

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"
    ]

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

如果您使用较旧的 VS Code(您不应该这样做),请尝试以下启动配置:


  "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"]
    
  ]

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

【讨论】:

知道如何将参数传递给nodemon,例如--watch /server/**.ts --exec ts-node server/server.ts?通常它只是 package.json 脚本或 cmd 行中的一大行。 nodemon --watch server/**/*.ts --ignore server/**/*.spec.ts --exec ts-node server/server.ts 我自己没试过,但是你应该可以在“args”数组中传递你需要的所有参数。对于您提到的示例,请尝试使用"args": ["--watch", "/server/**.ts", "--ignore", "server/**/*.spec.ts", "--exec", "ts-node", "server/server.ts"] 知道如何使用 babel-node/es6 做到这一点吗?这是我要运行的实际 nodemon 命令:nodemon src/shim-host/index.js --exec babel-node --babel-preset-es2015 但是当我将相关文件添加到 program 并将 nodemon 参数添加到 runtimeArgs 时它不起作用 @devdropper87:您需要更改“args”,而不是“runtimeArgs”。试试这个:"args": ["$workspaceRoot/src/shim-host/index.js", "--exec", "babel-node", "--babel-preset-es2015"] @AdrianT 我试过了,这是生成的 nodemon 命令(然后崩溃):[nodemon] starting babel-node $workspaceRoot/src/shim-host/index.js --babel-preset-es2015【参考方案2】:

我无法使用附加的调试器获得@AdrianT 的答案。似乎有一种更新的内置支持方式可以做到这一点:

    打开启动配置下拉菜单并选择“添加配置...” 选择“Node.js:Nodemon 设置”

它会在你的 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。

【讨论】:

这应该是公认的答案,因为它是现在这样做的正确方法。 如果你不喜欢运行全局nodemon,你也可以使用npm安装nodemon,然后设置"runtimeExecutable": "$workspaceFolder/node_modules/.bin/nodemon", flags 呢,它们在 runtimeExecutable 中吗【参考方案3】:

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


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

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

现在从 VC 和 vuala '附加'。

【讨论】:

为什么是端口 5858?如果 nodemon 在 3000 上运行。尝试 3000 并且它没有做任何事情(没有错误没有)似乎也没有工作。 @Yevgeni 所以我将--debug 标志传递给nodemon,我在Debugger listening on 127.0.0.1:5858 上看到远程调试,但奇​​怪的是VSCode 连接到某些东西,但似乎没有遇到断点【参考方案4】:

附加绝对是一个简单的选择。为了确保您的代码中断,请确保您使用--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
,

【讨论】:

【参考方案5】:

我尝试了 Adrian 和 Mathew 建议的解决方案。如果您在 macOS 上(也许也在 Linux 上),它们似乎工作得很好。在 Windows 上,也许马修的解决方案更稳定。将两者结合起来有一个可以同时兼容 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 并在开发时运行它。

【讨论】:

【参考方案6】:

不,目前不能。但我设法使用 nodemon 让这个有点工作。我从 Grunt 开始。但是一个等效的命令行应该做同样的事情。

编辑:经过一个晚上的测试,我可以说下面的方法仍然有些不稳定:S,连接会间歇性地失败,有时断点会被忽略。

EDIT2:您还可以在 Gruntfile 中使用 ['--debug-brk=5860']nodeArgs 指定非默认调试端口。我还被建议使用--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 中。)

【讨论】:

我已经创建了这个 VSCode 功能请求:github.com/Microsoft/vscode/issues/2103【参考方案7】:

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

上面的链接帮助我成功调试了 nodemon + express 应用程序。这些步骤在那里得到了很好的解释。

launch.json


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

npm 脚本

"dev-server": "nodemon ***--inspect*** server.js"

步骤:

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

现在你应该可以调试了。

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

【讨论】:

【参考方案8】:

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


    "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"
    

【讨论】:

【参考方案9】:

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

【讨论】:

code.visualstudio.com/Docs/editor/debugging 上没有提到 nodemon... 2016年6月有:web.archive.org/web/20160630150344/https://…【参考方案10】:

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

【讨论】:

【参考方案11】:

Nodemon 作为本地依赖项

我也无法立即得到@Adrian T 的回答。但这只是一个小细节,必须对其进行更改才能使其正常工作。所以我们开始:

    在***.vscode文件夹中创建一个launch.json文件 在 VS Code 中打开文件 使用内置按钮添加配置 - 将在编辑器中呈现 - 为 Node.js: Nodemon Setup 添加配置 在生成的配置中更改键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 下方,Martin 也有一个答案(只是为了正确):

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

Nodemon 作为全局依赖项

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

【讨论】:

【参考方案12】:

对于任何尝试在 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"
    

【讨论】:

【参考方案13】:

它在主终端中对我来说很好用。 不要使用VS代码终端,使用主系统终端。

【讨论】:

一个好的答案将始终包括解释为什么这会解决问题,以便 OP 和任何未来的读者可以从中学习。

以上是关于可以将 Visual Studio Code 配置为使用 nodemon 启动吗的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio Code 的 Mocha 断点

Visual Studio Code如何关闭代码智能提示?

Visual Studio Code配置C++环境

visual studio code主要用来写啥语言

Egret之Visual Studio Code环境配置

Visual Studio Code 配置VUE开发环境