gulp.js livereload与快递服务器?

我试图设置我的gulpfile.js使用快速服务器上的livereload没有太多的运气。 我看到那里的例子,但它们似乎与静态文件服务器有关。

http://code.tutsplus.com/tutorials/gulp-as-a-development-web-server–cms-20903 http://rhumaric.com/2014/01/livereload-magic-gulp-style/

所以我有一个app.js文件,它使用jade文件来执行标准的快递服务器等等。我想要做的就是让它和gulp.js启动中的livereload一起工作。

 app.set('port', process.env.PORT || 3000); var server = app.listen(app.get('port'), function() { debug('Express server listening on port ' + server.address().port); }); 

有大量的插件,如gulp-livereloadconnect-livereloadconnect-livereload gulp-connectconnect-livereload gulp-watch ,我怎么能把这个连接起来?

我已经添加了代码

  1. 检测服务器文件中的更改并通过nodemon重新加载服务器

  2. 在进程重新加载之后等待几秒钟,以便服务器有时间运行其初始化代码。

  3. 触发LiveReload服务器中的更改

注意1 :你的构build还应该包括一个livereload服务器,并在调用“serve”任务之前,将活动加载脚本附加到html文件中

注2 :这是一个永不结束的asynchronous任务, 不要用它作为其他任务的依赖


 gulp.task('serve', function (cb) { nodemon({ script : <server start file>, watch : <server files> //...add nodeArgs: ['--debug=5858'] to debug //..or nodeArgs: ['--debug-brk=5858'] to debug at server start }).on('start', function () { setTimeout(function () { livereload.changed(); }, 2000); // wait for the server to finish loading before restarting the browsers }); }); 

吞吐快递对你来说是正确的。 它运行你的快速脚本作为服务器,与livereload!

这是我的解决scheme:

 //gulpfile.js: var gulp = require('gulp'); var nodemon = require('gulp-nodemon'); var server = require('gulp-express'); var lr = require('tiny-lr')(); gulp.task('default', function () { nodemon({ script: 'server.js' }) .on('restart', function () { console.log('restarted!') }); lr.listen(35729); gulp.watch('server/**/*', function(event) { var fileName = require('path').relative('3000', event.path); lr.changed({ body: { files: [fileName] } }); }); }); 

您还需要在express服务器中包含connect-livereload:

 app.use(require('connect-livereload')()); 

在bodyParser之前包含它。 我读过,这是不需要的,如果你有铬现场重新加载扩展。

我有同样的问题,无法find任何相关的东西。 我的解决scheme以Gulpfile的以下代码Gulpfile

 var fork = require('child_process').fork; var tinyLr = require('tiny-lr'); var async = require('async'); var plugins = require('gulp-load-plugins')({ lazy: false }); var lr = null; var lrPort = 35729; var buildDir = 'build'; var serverAppFile = path.join(__dirname, 'build/server/app.js'); // This guy starts and stops nodejs process which runs our Express app var app = { start: function(callback) { process.execArgv.push('--debug'); var instance = app.instance = fork(serverAppFile, { silent: true }); app.dataListener = function(data) { var message = '' + data; // Assume that server is started when it prints the following to stdout if (message.indexOf('Express server listening on port') === 0) { callback(); } }; instance.stdout.on('data', app.dataListener); instance.stdout.pipe(process.stdout); instance.stderr.pipe(process.stderr); }, stop: function(callback) { app.instance.stdout.removeListener('data', app.dataListener); plugins.util.log('Killing Express server with PID', app.instance.pid); app.instance.kill('SIGTERM'); callback(); } }; // build-assets task actually processes my client js, less, images, etc and puts them to build dir // build-server task copies server files (app.js, controllers, views) to build dir gulp.task('serve', ['build-assets', 'build-server'], function(callback) { async.series([ app.start, function(callback) { lr = tinyLr(); lr.listen(lrPort, callback); } ], callback); }); gulp.task('watch', ['serve'], function() { // Reload page if built files were updated gulp.watch([ buildDir + '/**/*.handlebars', buildDir + '/**/*.html', buildDir + '/**/*.js', buildDir + '/**/*.css' ], function(event) { var fileName = path.relative(path.join(__dirname, buildDir), event.path); plugins.util.log('Detected updated file ' + fileName + ', reloading server and page in browser'); async.series([ // Restart Express server app.stop, app.start, // Send reload notification to browser function(callback) { lr.changed({ body: { files: [fileName] } }); callback(); } ]); }); // Perform build steps on source file modifications gulp.watch(['app/**/*.js', '!app/**/*.spec.js'], ['build-app-js']); gulp.watch(['app/**/*.html'], ['build-templates']); gulp.watch(['app/**/*.less'], ['build-less']); gulp.watch(['server/**/*.*'], ['build-server']); }); 

你需要安装tiny-lrasyncgulp-utilgulp-load-plugins包来使这个示例正常工作。 我想我会为它创build一个单独的Gulp插件=)

看看gulp-nodemon ,它将在代码更改时重新启动服务器。

例:

 gulp.task('develop', function () { nodemon({ script: 'app.js', ext: 'html js' }) .on('restart', function () { console.log('restarted!') }) }) 

实时重新加载应该适用于任何nodejs脚本。 这是一个好主意。