我在我的系统中安装了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时,它与节点
答案 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的答案,附带调试器。似乎有一种更新的内置支持方式来执行此操作:
它会在你的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进行调试似乎要稳定得多。
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",
}
]
步骤:
现在您应该可以进行调试了。
如果它没有帮助您,请查看官方文档,其中介绍了配置选项。 https://code.visualstudio.com/docs/nodejs/nodejs-debugging#_launch-configuration-support-for-npm-and-other-tools
答案 9 :(得分:0)
Nodemon作为本地依赖项
我也无法立即获得@Adrian T的答复。但这只是一个很小的细节,必须对其进行更改以使其起作用。所以我们开始:
"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%等)的情况下才能工作。由于大多数情况并非如此,因此您需要指定绝对路径(请参阅文档here和here)。
答案 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"
}
}