启动和停止 gulp-webserver
Start and stop gulp-webserver
我正尝试在不同的 gulp 任务中启动和停止 gulp-网络服务器,如下所示:
gulp.task('webserver', ['build'], function () {
gulp.src([config.build, config.base])
.pipe(webserver({
livereload: false,
directoryListing: false,
open: true
}));
});
gulp.task('webserver-stop', function () {
var stream = gulp.src([config.build, config.base])
.pipe(webserver());
stream.emit('kill');
});
我能够成功启动服务器,但是当我尝试停止使用 gulp webserver-stop
时,出现以下错误。
[19:36:30] Finished 'webserver-stop' after 27 ms
events.js:160
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE 127.0.0.1:8000
at Object.exports._errnoException (util.js:1008:11)
at exports._exceptionWithHostPort (util.js:1031:20)
at Server._listen2 (net.js:1253:14)
at listen (net.js:1289:10)
at net.js:1399:9
at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:65:16)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:84:10)
我之前没有使用 gulp 和 javascript 的重要经验,
请帮忙解决这个问题。
当你 运行 gulp webserver
然后 gulp webserver-stop
你有两个进程。这两个进程彼此一无所知。
因此,当您在 webserver-stop
中调用 webserver()
时,它只会启动另一个网络服务器实例。它不连接到已经 运行ning 的实例或类似的东西。由于端口 8000 上已经有一个网络服务器 运行ning,因此您会收到 EADDRINUSE
错误。
相反,您的 webserver-stop
任务需要向 运行ning 网络服务器发送一条消息,使其关闭。
既然您已经运行设置了网络服务器,那么您不妨通过 HTTP 发送该消息。您可以使用 gulp-webserver
的 middleware
option 来实现:
var gulp = require('gulp');
var webserver = require('gulp-webserver');
var http = require('http');
gulp.task('webserver', function () {
var stream = gulp.src(['.'])
.pipe(webserver({
livereload: false,
directoryListing: false,
open: true,
middleware: function(req, res, next) {
if (/_kill_\/?/.test(req.url)) {
res.end();
stream.emit('kill');
}
next();
}
}));
});
gulp.task('webserver-stop', function (cb) {
http.request('http://localhost:8000/_kill_').on('close', cb).end();
});
现在您可以在另一个终端 window 中调用 gulp webserver-stop
或只需在浏览器中打开 http://localhost:8000/_kill_
即可关闭 运行ning 网络服务器实例。
我正尝试在不同的 gulp 任务中启动和停止 gulp-网络服务器,如下所示:
gulp.task('webserver', ['build'], function () {
gulp.src([config.build, config.base])
.pipe(webserver({
livereload: false,
directoryListing: false,
open: true
}));
});
gulp.task('webserver-stop', function () {
var stream = gulp.src([config.build, config.base])
.pipe(webserver());
stream.emit('kill');
});
我能够成功启动服务器,但是当我尝试停止使用 gulp webserver-stop
时,出现以下错误。
[19:36:30] Finished 'webserver-stop' after 27 ms
events.js:160
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE 127.0.0.1:8000
at Object.exports._errnoException (util.js:1008:11)
at exports._exceptionWithHostPort (util.js:1031:20)
at Server._listen2 (net.js:1253:14)
at listen (net.js:1289:10)
at net.js:1399:9
at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:65:16)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:84:10)
我之前没有使用 gulp 和 javascript 的重要经验, 请帮忙解决这个问题。
当你 运行 gulp webserver
然后 gulp webserver-stop
你有两个进程。这两个进程彼此一无所知。
因此,当您在 webserver-stop
中调用 webserver()
时,它只会启动另一个网络服务器实例。它不连接到已经 运行ning 的实例或类似的东西。由于端口 8000 上已经有一个网络服务器 运行ning,因此您会收到 EADDRINUSE
错误。
相反,您的 webserver-stop
任务需要向 运行ning 网络服务器发送一条消息,使其关闭。
既然您已经运行设置了网络服务器,那么您不妨通过 HTTP 发送该消息。您可以使用 gulp-webserver
的 middleware
option 来实现:
var gulp = require('gulp');
var webserver = require('gulp-webserver');
var http = require('http');
gulp.task('webserver', function () {
var stream = gulp.src(['.'])
.pipe(webserver({
livereload: false,
directoryListing: false,
open: true,
middleware: function(req, res, next) {
if (/_kill_\/?/.test(req.url)) {
res.end();
stream.emit('kill');
}
next();
}
}));
});
gulp.task('webserver-stop', function (cb) {
http.request('http://localhost:8000/_kill_').on('close', cb).end();
});
现在您可以在另一个终端 window 中调用 gulp webserver-stop
或只需在浏览器中打开 http://localhost:8000/_kill_
即可关闭 运行ning 网络服务器实例。