2016-01-21 33 views
7

我有一个我用Node构建的网站。通过从命令行运行node server.js,我可以成功启动并运行该站点。然后我通过浏览器访问“http://localhost:3000”访问该网站。我现在正在尝试改进网站周围的一些构建过程。为此,我依靠Gulp。一口气加载

我想在HTML或CSS文件发生变化时自动重新加载网页。我偶然发现了gulp-livereload插件。我已按照文档中的描述安装它。然而,当我访问“http://localhost:35729/”在浏览器中,我只看到以下内容:

{ 
    minilr: "Welcome", 
    version: "0.1.8" 
} 

我一饮而尽任务的配置是这样的:

gulp.task('launch', function() { 
    var toWatch = [ 
     'src/**/*.html', 
     'src/**/*.css' 
    ]; 

    livereload.listen(); 
    gulp.watch(toWatch, function() { 
     console.log('reloading...'); 
     livereload(); 
    }) 
} 

我看不到我的主页像我这样做当我在运行node server.js后访问“http://localhost:3000”时。我错过了什么?

+0

Livereload需要一个插件来工作,另一个选择是browsersync,它具有其他很酷的功能,如多台设备之间的同步。如果你愿意,我可以帮你完成一个使用它的吞噬任务。 –

回答

3

你为什么访问'http://localhost:35729/'?如果这是livereload正在监听的端口,那么它将不会显示您的站点,因为如您所说,您的站点可从'http://localhost:3000'获得。

我假设你已经正确配置了gulp。通过它我的意思是livereload听着,你看在你的文件的变化,并在管你有“.pipe(livereload()”。

  1. 您必须安装https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei
  2. ,你必须运行你的应用程序“http://localhost:3000”的Chrome浏览器。
  3. 你会在浏览器插件栏新图标(这是这个插件的图标)
  4. ,你必须点击该图标即可运行该插件
  5. 完成

现在当你改变文件中的东西时,gulp watcher会注意到这一点,做一些工作,并通知chrome插件有变化,这个插件会刷新你的项目页面。

+0

我访问http:// localhost:35729的原因是因为这是livereload的默认端口(https://www.npmjs.com/package/livereload)。我试图实现这一点,所以我没有*必须安装浏览器插件。我想确保它可以在Firefox和Safari中运行。 –

+0

我也加了我的一口气任务。它仍然没有工作。我不知道为什么。 –

+0

我没有手动处理livereload的经验,对不起。但是,如果您在浏览器中打开livereload端口,它不会开始工作。如果你需要手动实现这可能你的应用程序应该听这个端口,并在某些情况下触发重新加载。实时重新加载它只是为了您的开发目的而不是为了您的客户,因此它不必交叉浏览。检查此页面:http://livereload.com/extensions/支持更多浏览器 –

5

实时重新加载是一种向浏览器发送通知以进行重新加载的协议。但是你需要一个浏览器插件来监听和重新加载,尽管可以使用脚本标签放弃插件。

gulp-livereload插件只关心livereload服务器的实现,您仍然需要通过http服务器从gulp服务文件。

您可以使用一个兼有gulp-connect的吞咽模块。

但是,除非您因为某种原因需要重新加载,否则我建议您使用browserync。 Browsersync是livereload的一个不错的替代方案,它有助于在浏览器之间同步您的视图的能力。由于它将脚本标记插入到html中,并在套接字上侦听,因此不需要任何插件即可使其工作。它甚至可以在移动设备上运行。

使用浏览器同步的吞咽任务可能如下所示。不要忘了将浏览器同步添加到您的 包。JSON文件

var browserSync = require('browser-sync').create(); 

gulp.task('serve', [] , function(cb){ 

    browserSync.init({ 
     open: true , 
     server: { 
      baseDir: "src" 
     } 
    }); 

    gulp.watch([ 
     'src/**/*' , 
    ] , ['serve:reload']); 

}); 

gulp.task('serve:reload' , [] , function(){ 
    browserSync.reload(); 
}); 
+0

有一种方法可以在不使用浏览器插件的情况下执行此操作。这里提到:https://www.npmjs.com/package/livereload#method-2-add-code-to-page。但是,我似乎无法通过实时重新加载来启动应用程序。 –

+0

我假设你正在使用gulp-livereload,仔细检查它是否使用了tyny-lr npm模块。这个模块只关心livereload服务器,但你仍然需要一个web服务器来提供这些文件。有几个其他的gulp模块可以同时执行(服务和livereload),例如https://www.npmjs.com/package/gulp-connect。不过,我仍然发现browsersync优于livereload,并建议您改用它。 –

+0

我已经通过express写了一个服务器。服务器放在一个名为server.js的文件中。出于这个原因,我不相信我需要大量的连接。但是,我不确定我应该使用什么。 –