问题
I have a NodeJs project and I run it using nodemon,
I wish to run it in debug mode for development tasks, but I am unable to do so.
I found that I'll need to add the right configuration to the launch.json file under .vscode folder,
I have a app.js
file which is the main app file.
And the application runs on node version 4.6.2
and on Port 8080
.
In usual case I run the App using npm run dev
command.
Following is my launch.json file -
{
// 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
}
]
}
The package.json is as follows -
{
"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"
}
}
The App gets launched when I run the DEBUG and nodemon configurations,
But the code is not getting paused on the breakpoints I put on the app.js file.
Reference links -
1. https://github.com/Microsoft/vscode-recipes/tree/master/nodemon
2. https://github.com/bdspen/nodemon_vscode
3. Can Visual Studio Code be configured to launch with nodemon
4. Cannot debug in VSCode by attaching to Chrome
5. https://code.visualstudio.com/docs/editor/debugging
What changes are required in package.json, or any corrections in Launch configuration - launch.json, that would help me to debug the application in VSCode for my usecase?
回答1:
Change package.json to
"scripts": {
"dev": "node app.js",
"debug": "nodemon --inspect app.js"
}
--inspect is for versions >= 6.3. --legacy or --auto for older versions
And launch.json to:
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "attach",
"name": "Node: Nodemon",
"processId": "${command:PickProcess}",
"restart": true,
"protocol": "inspector"
}
]
the restart flag is the key here.
Start app via new debug script
npm run debug
- In Debug view, select the Node: Nodemon configuration and press play or F5
- Choose the process started above
See more: vscode nodemon recipe
回答2:
nodemon listens to files changes and re-start the app on another process
So your configuration is correct but the debugger never "sees" the breakpoints .
There is no point of running debug mode with nodemon .
That's is a feature you may want to request on VScode(Auto-Restart on code change)
回答3:
In vscode config, you can set the runtimeExecutable
which will run the program you give. set restart:true
so vs code debugger can restart the process.
This is an example config:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "nodemon",
"runtimeExecutable": "nodemon",
"program": "${workspaceFolder}/bin/www",
"restart": true,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"env": {
"debug": "app:*",
}
}
]
}
It's easy than attaching debugger to running node process. Keep the type
来源:https://stackoverflow.com/questions/53352303/how-to-debug-a-nodemon-project-in-vscode