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()?
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |