vscode 执行npm命令_如何使用VSCode中的npm运行脚本进行调试?

这篇博客介绍了如何在VSCode中通过设置launch.json配置文件来调试npm脚本。提供了多种方法,包括直接在npm script中添加--debug-brk参数,或者在launch.json中配置"Launch via NPM"或"Attach To npm"。通过这些设置,可以方便地在VSCode中附加调试器并执行调试。

7 个答案:

答案 0 :(得分:20)

似乎VS Code将支持release from October 2016中的npm脚本和其他启动方案。

packages.json

"scripts": {

"debug": "node --nolazy --debug-brk=5858 myProgram.js"

},

vscode启动配置

{

"name": "Launch via NPM",

"type": "node",

"request": "launch",

"cwd": "${workspaceRoot}",

"runtimeExecutable": "npm",

"runtimeArgs": [

"run-script", "debug"

],

"port": 5858

}

答案 1 :(得分:17)

在.vscode / launch.json中配置新的调试目标:

{

"name": "Attach To npm",

"type": "node",

"request": "attach",

"port": 5858,

"address": "localhost",

"restart": false,

"sourceMaps": false,

"outDir": null,

"localRoot": "${workspaceRoot}",

"remoteRoot": null

}

使用--debug-brk选项配置你的npm运行节点:

"scripts": {

"start": "node app.js",

"debug": "node --debug-brk app.js"

...

从shell中启动您的应用:

$npm run debug

默认情况下,程序将在端口5858中等待附加调试器

因此,在Visual Studio代码中运行调试器("附加到npm")。

享受您的调试器:)

醇>

答案 2 :(得分:2)

使用npm可行,而不必更改scripts中的package.json部分

这里的技巧是将--inspect-brk=9229传递给节点。

该命令看起来像npm run start -- --inspect-brk=9229

这里是.vscode/launch.json:

{

"version": "0.2.0",

"configurations": [

{

"type": "node",

"request": "launch",

"name": "Launch via NPM",

"runtimeExecutable": "${env:NVM_BIN}/npm", //change this to your npm path

"runtimeArgs": [

"run-script",

"start",

"--",

"--inspect-brk=9229"

],

"port": 9229

},

]

}

答案 3 :(得分:2)

我尝试了GutiMac和Jpierson提供的解决方案,但由于某些原因,我无法使调试器与其中任何一个一起工作。

对我来说很好的替代解决方案(Ubuntu 16,节点8.9.1,VS 1.8.1)是使用这个简单的应用程序启动器(将在VS launch.json的配置数组中添加):

#myModal

答案 4 :(得分:2)

在运行外部npm运行脚本时,我还没有找到如何将--inspect-brk=9229传递给node的解决方案。因此,这是解决方法启动配置的解决方案。

如果要使用参数或什至脚本链来调试外部npm脚本,则可以直接从节点运行它们。例如,诸如angular-cli运行脚本之类的脚本:

"scripts": {

"ng": "ng",

"start": "ng serve",

"build": "ng build",

},

大多数外部票据都位于node_modules/bin文件夹中。您只需要找到脚本并弄清楚它运行的js文件。对于ng,它node_modules/@angular/cli/bin/ng。这是最终的启动配置:

{

"type": "node",

"request": "launch",

"name": "Launch ng build",

"runtimeExecutable": "node",

"runtimeArgs": [

"--inspect-brk=9229",

"node_modules/@angular/cli/bin/ng"

],

"args": ["build"],

"port": 9229

}

因此,当您开始调试时,您将启动下一个命令:

node --inspect-brk=9229 node_modules/@angular/cli/bin/ng build

现在您可以在外部脚本中设置断点了。

答案 5 :(得分:0)

我的情况有些不同。我正在测试一个api服务器和一个客户端(针对该api服务器)。这对我有用。

(api服务器的)package.json

"scripts": {

"start": "DEBUG=users:* PORT=3333 SEQUELIZE_CONNECT=models/sequelize-sqlite.yaml node user-server",

"debug": "DEBUG=users:* PORT=3333 SEQUELIZE_CONNECT=models/sequelize-sqlite.yaml node --inspect-brk user-server"

},

launch.json(属于api服务器)

"configurations": [

{

"type": "node",

"request": "attach",

"name": "Attach to Remote",

"address": "localhost",

"port": 9229,

"localRoot": "${workspaceFolder}",

"remoteRoot": "${workspaceFolder}",

"skipFiles": [

"/**"

]

},

完成后,我将执行以下操作。

npm运行调试

您应该立即得到这样的内容-调试器在ws://127.0.0.1:9229 / 8df6503b-00e9-43da-ac53-c54a013ba53f上监听

附加到(在调试菜单中)“附加到远程”(如果您具有多个调试配置,则输入任意名称),然后单击“运行”。

如果成功,您将立即看到类似以下内容的内容-附加了调试器

这将运行api服务器,并使调试器开始为我调试。

最后,要实际测试api客户端,我将像这样运行api客户端文件。 注意-所有文件都在根文件夹中。如果文件分布在其他位置,则必须相应地修改localRoot和remoteRoot。

PORT=3333 node users-add-testthisman1.js

在这里,重要的是要注意我的客户端配置。

var client = restify.createJsonClient({

url: 'http://localhost:'+process.env.PORT,

version: '*'

});

如果您有不同的配置,那么您的命令行当然会有不同的参数。

答案 6 :(得分:-3)

NPM脚本和gulp并不是真正用于启动应用程序,而是用于运行编译等任务。如果它是节点应用程序,我建议您在没有npm的情况下以这种方式配置launch.json。如果您有复杂的侦听器或PM2等流程管理器,请从流程管理器手动启动应用程序,然后使用Attach配置。

对于npm 任务,您可以使用"command": "npm"和"args": ["run"]指定tasks.json。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值