Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题

Posted

技术标签:

【中文标题】Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题【英文标题】:Issue with Cluster on Visual studio code (F5) on Node.js v6.0.0 【发布时间】:2016-08-28 23:22:01 【问题描述】:

我对带有 Cluster

Visual Studio 代码 有一些问题

编辑

如果我按下 Ctrl + F5,它可以正常工作,除了 F5 之外它还在做什么,我是否需要始终使用 Ctrl 启动命令?

---

当使用 VS Code Launch 命令(F5) 启动时,worker 似乎永远不会启动。我是否需要对 .vscode/launch.json 文件进行一些更改以使集群正常工作。

实际代码复制自 Node.js 6 api https://nodejs.org/api/cluster.html#cluster_cluster

npm test Windows 命令提示符显示:

Master started
Listening port 80
Listening port 80
Listening port 80
Listening port 80

VS Code (F5) 调试控制台显示:

node --debug-brk=7601 --nolazy index.js
Debugger listening on port 7601
Master started
Debugger listening on port 7602
Debugger listening on port 7603
Debugger listening on port 7604
Debugger listening on port 7605

VS 代码启动.json


    "version": "0.2.0",
    "configurations": [
        
            "name": "Launch",
            "type": "node",
            "request": "launch",
            "program": "$workspaceRoot/index.js",
            "stopOnEntry": false,
            "args": [],
            "cwd": "$workspaceRoot",

    ..........

index.js

const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) 
    // Fork workers.
    console.log('Master started')
    for (var i = 0; i < numCPUs; i++) 
        cluster.fork();
    

    cluster.on('exit', (worker, code, signal) => 
        console.log(`worker $worker.process.pid died`);
    );
 else 
    // Workers can share any TCP connection
    // In this case it is an HTTP server
    http.createServer((req, res) => 
        res.writeHead(200);
        res.end('hello world\n');
    ).listen(80);
    console.log('Listening port 80')

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。 weinand 在https://github.com/Microsoft/vscode/issues/3201 中描述的第二种解决方法对我有用:

从终端启动节点并使用 VS Code 附加到它 调试器。

在终端运行:node --debug app.js

然后选择默认的“附加”启动配置并 附在上面。

如果您确实想要调试任何 worker 而不仅仅是启动的第一个进程。

【讨论】:

用于开发,只调试master可以做:process.execArgv[0] = process.execArgv[0].replace('-brk', '');【参考方案2】:

我在使用 Cluster 的 Visual Studio 代码上遇到了同样的问题。

我发现有一些肮脏的方法可以使它起作用。

Mac OS X:

/应用程序/Visual Studio Code.app/Contents/Resources/app/extensions/node-debug/out/node/nodeDebug.js

Windows:

C:\Program Files (x86)\Microsoft VS Code\resources\app\extensions\node-debug\out\node\nodeDebug.js

改变这个

if (!this._noDebug) 
    launchArgs.push("--debug-brk=" + port);

if (!this._noDebug) 
    launchArgs.push("--debug=" + port);

我知道这不是解决问题的最佳方法,但到目前为止它对我有用。

【讨论】:

这只是不会启用调试器,也不会命中任何断点

以上是关于Node.js v6.0.0 上 Visual Studio 代码 (F5) 上的集群问题的主要内容,如果未能解决你的问题,请参考以下文章

在Visual Studio上开发Node.js程序

在Visual Studio上开发Node.js程序——远程调试及发布到Azure

Visual Studio Code调试node.js:无法在PATH上找到运行时的node

使用 Visual Studio 2012 express 进行 TypeScript、node.js 开发

魔众题库系统 v6.0.0 模块市场上线,系统内容更丰富

ES2015“导入”在带有 --harmony_modules 选项的节点 v6.0.0 中不起作用