我有一个NodeJs项目,
我希望在调试模式下运行它以执行开发任务,但我无法这样做。
我发现需要将正确的配置添加到.vscode文件夹下的launch.json文件中,
我有一个app.js
文件,这是主要的应用程序文件。
应用程序在node version 4.6.2
和Port 8080
上运行。
在通常情况下,我使用npm run dev
命令运行应用程序。
以下是我的launch.json文件-
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "MyApp",
"program": "${workspaceFolder}/app.js",
"runtimeVersion": "4.6.2",
"protocol": "legacy",
"port": 8080
//"runtimeExecutable": "/home/user/.nvm/versions/node/v4.6.2/bin/node"
},
{
"type": "node",
"request": "launch",
"name": "nodemon",
"runtimeExecutable": "nodemon",
"program": "${workspaceRoot}/app.js",
"restart": true,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"runtimeVersion": "4.6.2",
"protocol": "legacy",
"port": 8080
},
{
"type": "node",
"request": "launch",
"name": "DEBUG",
"runtimeExecutable": "nodemon",
"program": "${workspaceFolder}/app.js",
"restart": true,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"runtimeVersion": "4.6.2",
"protocol": "legacy",
"port": 8080
}
]
}
package.json如下所示-
{
"name": "myapp",
"description": "myapp",
"version": "1.35.0",
"private": true,
"scripts": {
"dev": "nodemon app.js",
"debug": "nodemon app.js"
},
"dependencies": {
"async": "1.3.0",
"aws-sdk": "2.7.20",
"aws-xray-sdk": "^2.1.0",
"aws-xray-sdk-restify": "^1.3.0-beta",
"bcrypt": "0.8.5",
"body-parser": "1.12.3",
"compression": "^1.7.0",
"connect-flash": "0.1.1",
"cookie-parser": "1.3.4",
"cron": "1.0.9",
"csurf": "^1.9.0",
"csvtojson": "^1.1.2",
"date-utils": "1.2.16",
"dotenv": "4.0.0",
"email-templates": "1.2.1",
"express": "4.12.3",
"express-handlebars": "2.0.0",
"express-jwt": "^5.1.0",
"express-mailer": "0.2.4",
"express-session": "1.11.1",
"express-validator": "3.1.3",
"handlebars": "^3.0.3",
"helmet": "^3.5.0",
"html-pdf": "1.4.0",
"json-2-csv": "2.0.12",
"jsonwebtoken": "^7.3.0",
"multer": "^0.1.8",
"mysql": "2.6.2",
"newrelic": "1.25.0",
"node-schedule": "^1.3.0",
"nodemailer": "^1.3.4",
"nodemailer-ses-transport": "1.2.0",
"passport": "0.2.1",
"passport-local": "1.0.0",
"path": "0.11.14",
"promise": "7.0.0",
"qs": "^2.4.1",
"replaceall": "0.1.6",
"request": "2.55.0",
"run-parallel": "1.1.0",
"validator": "^7.0.0",
"winston": "^2.3.1",
"winston-daily-rotate-file": "^1.7.0",
"xlsx": "0.8.8"
},
"devDependencies": {
"nodemon": "^1.17.3"
}
}
**当我运行DEBUG和nodemon配置时,应用程序启动,
但是代码在我放在app.js文件上的断点处没有暂停。**
参考链接-
- https://github.com/Microsoft/vscode-recipes/tree/master/nodemon
- https://github.com/bdspen/nodemon_vscode
- Can Visual Studio Code be configured to launch with nodemon
- Cannot debug in VSCode by attaching to Chrome
- https://code.visualstudio.com/docs/editor/debugging
在package.json中需要做哪些更改,或者在Launchconfiguration-launch.json中需要做哪些更正,这将有助于我在VSCode中为我的用例调试应用程序?
9条答案
按热度按时间fnvucqvd1#
Change package.json to
--inspect is for versions >= 6.3. --legacy or --auto for older versions
And launch.json to:
the restart flag is the key here.
Start app via new debug script
npm run debug
See more: vscode nodemon recipe
cvxl0en22#
在vscode配置中,您可以设置
runtimeExecutable
,它将运行您给定的程序。设置restart:true
以便vs代码调试器可以重新启动进程。这是一个配置示例:
将
program
更新为要调试的节点文件。这比将调试器附加到正在运行的节点进程要容易。
wmtdaxz33#
我在一个Dockerized nodemon进程中遇到了类似的问题。我在this article中找到了解决方案。我能够通过更改三件事来让它工作:
1.将
--inspect=0.0.0.0
添加到启动服务的npm脚本(在我的示例中命名为debug
):1.确保端口9229(或者您希望使用的任何调试端口)在Docker容器中打开。我使用的是
docker-compose
,因此它在关联的yaml中定义:1.将以下配置添加到VS代码中的
launch.json
:"restart": true
选项允许调试器在nodemon在监视的文件更改后重新编译内容时自动重新附加。8i9zcol24#
您可以使用F5启动并连接nodemon,但是需要进行更多的设置。
我们必须首先通过VS代码任务预启动nodemon,然后附加。
我使用远程调试器进行附加,因为它不需要额外的点击来选择要附加的进程,并且VS Code进程选择器当前是broken in WSL2,这是我的主开发环境。
tasks.json(来自this answer):
launch.json:
在npm dev脚本中(对于节点〉= 6.9):
注意--如果进程启动时间超过10秒,这种方法就不起作用。在这种情况下,你必须弄清楚如何在预启动任务完成时向VS Code发出信号。这可能可以通过使用beginsPattern / endPattern正则表达式来实现,尽管我还没有尝试过。
m3eecexj5#
在2022年,我用这个:
第一个
在此之后,我在vscode中单击
Run and Debug: Launch via NPM
。调试器将以nodemon启动,并且在代码更改时断点将正常工作。92dk7w1h6#
正如“极客”所建议的,
1.您应该修改launch.json,如下所示:
1.启动服务器“npm run dev”(如您所见,在“request”属性中,我们将其设置为attach。因此,我们必须先运行服务器,然后再连接调试器)。
1.点击vscode左边的类似bug的图标。在上面你会看到一个绿色的小播放图标。点击它右边的下拉箭头,然后选择“Attach by process ID”。
1.点击播放图标,然后vscode底部的一个条应该变成深橙色。现在尝试发出一个请求。断点将被正确命中!
qgzx9mmu7#
nodemon监听文件更改并在另一个进程上重新启动应用程序
因此,您的配置是正确的,但调试器永远不会“看到”断点。
使用nodemon运行调试模式是没有意义的。
这是您可能希望在VScode上请求的功能(代码更改时自动重启)
wvyml7n58#
我在寻找同样的问题,并遇到了这个问题,因为现在在2022年7月1日,这似乎是最好的方法。使用自动附加功能在VSCode.
我按照本文所述,重新启动IDE,设置断点,然后使用以下命令运行代码:
一切都按预期正常工作。
所以过程:
wfveoks09#
这里是2022
在我使用以下值编辑
runtimeExecutable
之前,没有一个解决方案对我有效:其给出: