私のアプリケーションは同形の JavaScript で構築されており、Gulpタスクを使用して新しいインスタンスで Node.js サーバーを実行し、ファイルの変更をリッスンしてサーバーを再起動し、ブラウザーをリロードします ( Browsersyncを使用)。
Babelを使用して、ECMAScript 6 でサーバー側のコードとクライアント側のコードを記述したいと考えています。Babel ポリフィルを避けてnode_modules/.bin/babel-core.cmd server.js
代わりにコマンドを使用したいのですがchild_process.fork()
、実行可能ファイルのみを許可します。
let child = cp.fork('server.js', [], {
execPath: path.normalize('node_modules/.bin/babel-node.cmd'),
env: _.assign({NODE_ENV: 'development'}, process.env)
});
このスクリプトは機能せず、意図したとおり、次のエラーがスローされます。
child_process.js:588
p.open(fd);
^
Error: EINVAL, invalid argument
at Error (native)
at Object.exports._forkChild (child_process.js:588:5)
at Function.startup.processChannel (node.js:704:10)
at startup (node.js:59:15)
at node.js:814:3
child_process.fork()
このケースに使いたい。child_process.spawn()
実際、2 つの Node.js プロセス間に直接通信がないため、ここでは機能しません。そして、私はイベントからアクションを実行するのを聞いています:
// server.js
server.listen(port, function() {
if (process.send) {
process.send('online');
} else {
...
}
});
// gulpfile.babel.js
child.on('message', (message) => {
if (message.match(/^online$/)) {
if (browserSyncServer) {
browserSyncServer.reload();
}
if (!started) {
started = true;
gulp.watch(config.serverScripts, () => {
plugins.util.log('Restarting development server.');
server.kill('SIGTERM');
server = startup();
});
cb();
}
}
});
これに関する回避策はありますか?または、サーバー側のコードで直接 Babel ポリフィルを使用する必要がありますか?