Gulp 观察何时调用节点 app.listen() 或移植(livereload、nodejs 和 gulp)
Gulp to watch when node app.listen() is invoked or to port (livereload, nodejs and gulp)
我正在尝试让 gulp-livereload
与我的 nodejs 服务器一起工作。我正在使用 gulp-nodemon
在更改文件后重新启动服务器,这有效。我无法在正确的时间调用 livereload.reload()
。
我目前正在 gulpfile.js
中的 .on('start'...
上调用 livereload.reload()
(每当我的 nodemon 启动脚本时)。这有效,但需要几秒钟。原因是当 nodemon 开始 运行 它调用的 nodejs 脚本 livereload.listen()
在 脚本调用 app.listen(port)
之前,所以我的浏览器在没有服务器的情况下刷新准备就绪。
有没有办法监听 nodejs nodemon 脚本是否已调用 app.listen(port)
或者监听是否正在使用特定端口?
我已经通过小睡解决了这个问题,但感觉很不对劲。
使用可读事件监控子进程的标准输出。
示例:
nodemon({script: 'app.js',
nodeArgs: ['--harmony'],
stdout: false})
.on('readable', function(data) {
this.stdout.on('data', function(chunk) {
if (/koa server listening/.test(chunk)) {
console.log('livereload');
livereload.reload();
}
process.stdout.write(chunk);
});
this.stderr.pipe(process.stderr);
});
app.js
app.listen(3000, function(err) {
console.log('koa server listening');
});
这是一个基于 connect
服务器和 connect-livereload
和 gulp-livereload
插件的 simple and tested livereload solution 示例,如果有帮助的话:
var gulp = require('gulp');
var connect = require('connect');
var connectLivereload = require('connect-livereload');
var opn = require('opn');
var gulpLivereload = require('gulp-livereload');
var config = {
rootDir: __dirname,
servingPort: 8080,
// the files you want to watch for changes for live reload
filesToWatch: ['*.{html,css,js}', '!Gulpfile.js']
}
// The default task - called when you run `gulp` from CLI
gulp.task('default', ['watch', 'serve']);
gulp.task('watch', ['connect'], function () {
gulpLivereload.listen();
gulp.watch(config.filesToWatch, function(file) {
gulp.src(file.path)
.pipe(gulpLivereload());
});
});
gulp.task('serve', ['connect'], function () {
return opn('http://localhost:' + config.servingPort);
});
gulp.task('connect', function(){
return connect()
.use(connectLivereload())
.use(connect.static(config.rootDir))
.listen(config.servingPort);
});
我正在尝试让 gulp-livereload
与我的 nodejs 服务器一起工作。我正在使用 gulp-nodemon
在更改文件后重新启动服务器,这有效。我无法在正确的时间调用 livereload.reload()
。
我目前正在 gulpfile.js
中的 .on('start'...
上调用 livereload.reload()
(每当我的 nodemon 启动脚本时)。这有效,但需要几秒钟。原因是当 nodemon 开始 运行 它调用的 nodejs 脚本 livereload.listen()
在 脚本调用 app.listen(port)
之前,所以我的浏览器在没有服务器的情况下刷新准备就绪。
有没有办法监听 nodejs nodemon 脚本是否已调用 app.listen(port)
或者监听是否正在使用特定端口?
我已经通过小睡解决了这个问题,但感觉很不对劲。
使用可读事件监控子进程的标准输出。
示例:
nodemon({script: 'app.js',
nodeArgs: ['--harmony'],
stdout: false})
.on('readable', function(data) {
this.stdout.on('data', function(chunk) {
if (/koa server listening/.test(chunk)) {
console.log('livereload');
livereload.reload();
}
process.stdout.write(chunk);
});
this.stderr.pipe(process.stderr);
});
app.js
app.listen(3000, function(err) {
console.log('koa server listening');
});
这是一个基于 connect
服务器和 connect-livereload
和 gulp-livereload
插件的 simple and tested livereload solution 示例,如果有帮助的话:
var gulp = require('gulp');
var connect = require('connect');
var connectLivereload = require('connect-livereload');
var opn = require('opn');
var gulpLivereload = require('gulp-livereload');
var config = {
rootDir: __dirname,
servingPort: 8080,
// the files you want to watch for changes for live reload
filesToWatch: ['*.{html,css,js}', '!Gulpfile.js']
}
// The default task - called when you run `gulp` from CLI
gulp.task('default', ['watch', 'serve']);
gulp.task('watch', ['connect'], function () {
gulpLivereload.listen();
gulp.watch(config.filesToWatch, function(file) {
gulp.src(file.path)
.pipe(gulpLivereload());
});
});
gulp.task('serve', ['connect'], function () {
return opn('http://localhost:' + config.servingPort);
});
gulp.task('connect', function(){
return connect()
.use(connectLivereload())
.use(connect.static(config.rootDir))
.listen(config.servingPort);
});