在不退出NodeJS的情况下关闭浏览器同步实例

Rem*_*ing 5 node.js gulp browser-sync

我正在尝试创建一个吞吞吐吐的任务,该任务启动3个Browsersync实例,使用Protractor对它们运行端到端测试,然后很好地关闭Browsersync实例。

到目前为止,我已经提出了以下解决方案:

/**
 * Run the end-to-end tests using Protractor.
 */
gulp.task('test:protractor', [
  'serve:user',
  'serve:bootstrap',
  'serve:website'
], function(done) {
  var protractor = spawn('protractor', [
    path.resolve(__dirname, '..', 'protractor.conf.js'),
    '--suite=bootstrap',
    '--param.host.user', 'http://' + util.getDockerIp() + ':' + serve.userServer.getOption('port'),
    '--param.host.bootstrap', 'http://' + util.getDockerIp() + ':' + serve.bootstrapServer.getOption('port'),
    '--param.host.website', 'http://' + util.getDockerIp() + ':' + serve.websiteServer.getOption('port')
  ], {stdio: 'inherit'});
  protractor.on('close', function(code) {
    if (code) {
      throw new Error(chalk.red('End-to-end tests failed'));
    }
    serve.userServer.exit();
    serve.bootstrapServer.exit();
    serve.websiteServer.exit();
    done();
  });
});
Run Code Online (Sandbox Code Playgroud)

这里的问题是xxxServer.exit()。此调用在process.exit()内部关闭整个NodeJS实例。这样,我无法很好地关闭每个服务器,而让gulp处理其余的服务器。

我找不到有关以其他任何方式关闭Browsersync的信息,因此我调查了该exit函数,如下所示:

function exit() {
    if (browserSync.active) {
        browserSync.events.emit("service:exit");
        browserSync.cleanup();
    }
    process.exit();
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试手动进行清理而没有调用 process.exit()

serve.userServer.instance.events.emit('service:exit');
serve.userServer.instance.cleanup();
serve.bootstrapServer.instance.events.emit('service:exit');
serve.bootstrapServer.instance.cleanup();
serve.websiteServer.instance.events.emit('service:exit');
serve.websiteServer.instance.cleanup();
Run Code Online (Sandbox Code Playgroud)

这仍然可以防止NodeJS实例关闭。

是否可以在不调用Browsersync实例的情况下将其关闭process.exit()