如何让livereload工作?

时间:2014-08-15 04:08:04

标签: javascript websocket gulp livereload

我使用gulp-connect 2.0.6尝试让livereload工作,

WebSocket connection to 'ws://localhost:35729/livereload' failed: Error during WebSocket handshake: Status line contains embedded null 

抛出该错误的行说明,

this.socket = new this.WebSocket(this._uri);

我在此gist中粘贴了所有相关文件(gulpfile.jspackage.json等)和控制台输出。

1 个答案:

答案 0 :(得分:0)

据我所知,您似乎正在关注我发布的一个截屏视频,通过自动重新加载启动D3环境:https://www.tagtree.tv/d3-episode1-environment

我看了一下这个要点。为了让这个帖子更容易为每个人阅读,我想提取你的gulpfile.js的内容:

您的gulpfile.js

var gulp = require('gulp'),
  connect = require('gulp-connect'),
  traceur = require('gulp-traceur'),
  sass = require('gulp-ruby-sass');

gulp.task('connect', function() {
  connect.server({
    livereload: true,
    port: 8005
  });
});

gulp.task('sass', function(){
  gulp.src('./sass/*.scss')
  .pipe(sass())
  .pipe(gulp.dest('dist/css'));
});

gulp.task('watch', function(){
  gulp.watch(['./sass/*.scss'], ['sass']);
});

gulp.task('default', ['connect', 'watch', 'sass']);

<强>解决方案

我不知道这是否是绝对必要的,但是当我对截屏视频进行编码时,我所做的就是从监视任务中调出一个gulp任务,该任务在连接上调用reload。

更改观看任务

首先,您需要将观看任务更改为这样。请注意,该路径使用screencast中的路径,但使用正确的glob来监视应该触发重新加载的文件。

gulp.task('watch', function(){
    gulp.watch(['./sass/*.scss'], ['sass']);
    gulp.watch(['./dist/**/*.*'], ['reload']);
});

重新加载任务

reload任务调用connect模块上的reload,它在websocket上发布一条消息,导致重新加载文件,这是我的重载任务的样子:

gulp.task('reload', function(){
    gulp.src('./dist/**/*.*')
    .pipe(connect.reload());
});

gulpfile.js的最终版本

对于其他遇到 screencast 问题的人,请查看 gulpfile 的最终版本:

var gulp = require('gulp'),
    connect = require('gulp-connect'),
    traceur = require('gulp-traceur'),
    sass = require('gulp-ruby-sass');

gulp.task('connect', function(){
    connect.server({
        livereload: true,
        port: 8005
    });
});

gulp.task('reload', function(){
    gulp.src('./dist/**/*.*')
    .pipe(connect.reload());
});

gulp.task('sass', function(){
    gulp.src('./sass/*.scss')
    .pipe(sass())
    .pipe(gulp.dest('dist/css'));
});

gulp.task('traceur', function(){
    gulp.src('./scripts/*.js')
    .pipe(traceur())
    .pipe(gulp.dest('dist/scripts'));
});


gulp.task('watch', function(){
    gulp.watch(['./sass/*.scss'], ['sass']);
    gulp.watch(['./scripts/*.js'], ['traceur']);
    gulp.watch(['./dist/**/*.*'], ['reload']);
});


gulp.task('default', ['connect', 'watch', 'sass', 'traceur']);