2016-08-23 13 views
0

クラスタを使用してマルチコアCPUを利用する利点を活用しようとしています。コードで:cluster.onでbabelを使用したES6とES2016の動作が異なります

import * as cluster from 'cluster' 

if (cluster.isMaster) { 
    for(let i = 0; i < 2; ++i) { 
     cluster.fork(); 
    } 
    cluster.on('exit', (worker) => console.log('Worker ' + worker.process.pid + ' exitted.')); 
} else { 
    console.log('Worker ' + cluster.worker.process.pid); 
    process.exit(0); 
} 

出力(バベルの後:私はバベルと一緒importを使用しようとしたとき

var cluster = require('cluster'); 

if (cluster.isMaster) { 
    for(var i = 0; i < 2; ++i) { 
     cluster.fork(); 
    } 
    cluster.on('exit', function (worker) { 
     console.log('Worker ' + worker.process.pid + ' exitted.'); 
    }); 
} else { 
    console.log('Worker ' + cluster.worker.process.pid); 
    process.exit(0); 
} 

ノードは、

Worker 14058 
Worker 14064 
Worker 14058 exitted. 
Worker 14064 exitted. 

しかし出力で完全に働いた、私が問題です)は、

2.js:13 
    cluster.on('exit', function (worker) { 
      ^

TypeError: cluster.on is not a function 
    at Object.<anonymous> (2.js:13:13) 
    at Module._compile (module.js:556:32) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 
    at tryModuleLoad (module.js:432:12) 
    at Function.Module._load (module.js:424:3) 
    at Module.runMain (module.js:590:10) 
    at run (bootstrap_node.js:394:7) 
    at startup (bootstrap_node.js:149:9) 
    at bootstrap_node.js:509:3 
Worker 14140 
Worker 14146 

これは奇妙に見えます。私はバベル6.11.4 (babel-core 6.13.2)で、ノードv6.4.0を使用しています、.babelrcの内容は次のとおりです。

{ 
    "presets": ["es2016", "es2015"] 
} 

何が起こったのか任意のアイデア?

答えて

0

[OK]を、私はその理由を考え出し、refは:Difference between import X and import * as X in node.js (ES6/Babel)?

ポイントがimport cluster from 'cluster'import * as cluster from 'cluster'を変更です。 import * as cluster from 'cluster'

、エクスポート可能であるすべてのものは名前clusterを持つオブジェクトにエクスポートし、それが構造を有するされています。一方

{ domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    Worker: 
    { [Function: Worker] 
    super_: 
     { [Function: EventEmitter] 
     EventEmitter: [Circular], 
     usingDomains: false, 
     defaultMaxListeners: 10, 
     init: [Function], 
     listenerCount: [Function] } }, 
    isWorker: false, 
    isMaster: true, 
    workers: {}, 
    settings: {}, 
    schedulingPolicy: 2, 
    SCHED_NONE: 1, 
    SCHED_RR: 2, 
    setupMaster: [Function], 
    fork: [Function], 
    disconnect: [Function], 
    default: 
    EventEmitter { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    Worker: { [Function: Worker] super_: [Object] }, 
    isWorker: false, 
    isMaster: true, 
    workers: {}, 
    settings: {}, 
    schedulingPolicy: 2, 
    SCHED_NONE: 1, 
    SCHED_RR: 2, 
    setupMaster: [Function], 
    fork: [Function], 
    disconnect: [Function] } } 

を、ときimport cluster from 'cluster'clusterオブジェクトは、デフォルトのエクスポートです:

EventEmitter { 
    domain: null, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    Worker: 
    { [Function: Worker] 
    super_: 
     { [Function: EventEmitter] 
     EventEmitter: [Circular], 
     usingDomains: false, 
     defaultMaxListeners: 10, 
     init: [Function], 
     listenerCount: [Function] } }, 
    isWorker: false, 
    isMaster: true, 
    workers: {}, 
    settings: {}, 
    schedulingPolicy: 2, 
    SCHED_NONE: 1, 
    SCHED_RR: 2, 
    setupMaster: [Function], 
    fork: [Function], 
    disconnect: [Function] } 
0
require('babel-core/register')({ 
    presets: ['node6'] 
}); 

const app = require('./test.js'); 
app(); 

test.jsにあなたのコードを保存し、魔法を参照してください

+0

このコードは質問に答えるかもしれませんが、どのようにして問題が解決されるのか、および/またはそれがなぜ解決されるのかについての追加の文脈を提供すると、回答の長期的価値が向上します。 –

関連する問題