6

gulp-livereload在我的 vagrant 环境(使用 puphpet 生成)中使用时遇到问题。我的计算机是 Windows 主机,VM 是 Debian。

我使用这个 gulpfile :

var gulp       = require('gulp'),
    less       = require('gulp-less')
    lr         = require('tiny-lr'),
    livereload = require('gulp-livereload'),
    server     = lr()
;

gulp.task('less', function () {
    gulp.src('assets/less/*.less')
        .pipe(less())
        .pipe(gulp.dest('build/css'))
        .pipe(livereload(server))
    ;
});

gulp.task('watch', function() {
    gulp.watch('assets/less/*.less', ['less']);
    livereload.listen(35729, function(err){
        if(err) return console.log(err);
    });
});

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

当 Chrome 扩展添加魔术 JS 文件时,我收到此消息:

加载资源失败:net::ERR_CONNECTION_TIMED_OUT http://markup.dev:35729/livereload.js?ext=Chrome&extver=0.0.5

但是在我的虚拟机中,如果我运行以下命令行,我就会明白

wget http://localhost:35729/livereload.js?ext=Chrome&extver=0.0.5
4

2 回答 2

8

我没有足够的信息来确定,但我猜你的问题是你试图从主机访问页面,但是 livereload 端口没有被转发(VM 有它自己的 IP 地址,vagrant 可以是配置为将某些端口转发到主机,以便它们“看起来”在主机上是本地的)。

尝试将以下行添加到您的Vagrantfile

config.vm.network "forwarded_port", guest: 35729, host: 35729

(有关文档,请参阅:https ://docs.vagrantup.com/v2/networking/forwarded_ports.html )

或者,如果您直接点击虚拟机(即您已markup.dev映射到来宾的 IP),则可能值得验证您的虚拟机上没有配置防火墙,这可能会阻止 livereload 端口从外部访问。

于 2014-12-02T00:40:34.067 回答
3

就我而言,端口转发自动工作。但是,我必须将 VM 的 IP 指定为主机:

livereload.listen({
    host: '192.168.33.10'
});

更新:传递null也有效:

livereload.listen({
    host: null
});

我猜想底层http 服务器在'localhost' 显式传递时表现不同。

于 2015-01-14T17:26:28.367 回答