From bfbb723f4293c883172d977e4451104b8cfe42b7 Mon Sep 17 00:00:00 2001 From: Isabella Date: Sat, 23 Jun 2018 16:09:03 -0500 Subject: [PATCH] feat(ShardingManager): add execArgv option (#2585) --- src/sharding/Shard.js | 15 +++++++++++---- src/sharding/ShardingManager.js | 10 +++++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/sharding/Shard.js b/src/sharding/Shard.js index 1f3f56455..44a9f970b 100644 --- a/src/sharding/Shard.js +++ b/src/sharding/Shard.js @@ -14,9 +14,8 @@ class Shard extends EventEmitter { /** * @param {ShardingManager} manager Manager that is spawning this shard * @param {number} id ID of this shard - * @param {string[]} [args=[]] Command line arguments to pass to the script */ - constructor(manager, id, args = []) { + constructor(manager, id) { super(); /** @@ -35,7 +34,13 @@ class Shard extends EventEmitter { * Arguments for the shard's process * @type {string[]} */ - this.args = args; + this.args = manager.args; + + /** + * Arguments for the shard's process executable + * @type {string[]} + */ + this.execArgv = manager.execArgv; /** * Environment variables for the shard's process @@ -91,7 +96,9 @@ class Shard extends EventEmitter { async spawn(waitForReady = true) { if (this.process) throw new Error('SHARDING_PROCESS_EXISTS', this.id); - this.process = childProcess.fork(path.resolve(this.manager.file), this.args, { env: this.env }) + this.process = childProcess.fork(path.resolve(this.manager.file), this.args, { + env: this.env, execArgv: this.execArgv, + }) .on('message', this._handleMessage.bind(this)) .on('exit', this._exitListener); diff --git a/src/sharding/ShardingManager.js b/src/sharding/ShardingManager.js index 5283c9414..1af2b6632 100644 --- a/src/sharding/ShardingManager.js +++ b/src/sharding/ShardingManager.js @@ -22,6 +22,7 @@ class ShardingManager extends EventEmitter { * @param {number|string} [options.totalShards='auto'] Number of shards to spawn, or "auto" * @param {boolean} [options.respawn=true] Whether shards should automatically respawn upon exiting * @param {string[]} [options.shardArgs=[]] Arguments to pass to the shard script when spawning + * @param {string[]} [options.execArgv=[]] Arguments to pass to the shard script executable when spawning * @param {string} [options.token] Token to use for automatic shard count and passing to shards */ constructor(file, options = {}) { @@ -30,6 +31,7 @@ class ShardingManager extends EventEmitter { totalShards: 'auto', respawn: true, shardArgs: [], + execArgv: [], token: null, }, options); @@ -70,6 +72,12 @@ class ShardingManager extends EventEmitter { */ this.shardArgs = options.shardArgs; + /** + * An array of arguments to pass to the executable + * @type {string[]} + */ + this.execArgv = options.execArgv; + /** * Token to use for obtaining the automatic shard count, and passing to shards * @type {?string} @@ -90,7 +98,7 @@ class ShardingManager extends EventEmitter { * @returns {Shard} */ createShard(id = this.shards.size) { - const shard = new Shard(this, id, this.shardArgs); + const shard = new Shard(this, id); this.shards.set(id, shard); /** * Emitted upon creating a shard.