Livereload не работает в gulp

Я использовал gulp -webapp (генератор от yoman) и добавил некоторые другие задачи (например, gulp -sass и gulp -coffee).

Но теперь Livereload не запускается. Мне нужно увидеть что-то вроде этого

[gulp] Live reload server listening on: 35729

Но вывод выглядит как

➜  app git:(master) ✗ gulp watch
[gulp] Using gulpfile ~/Dev/lsd/app/gulpfile.js
[gulp] Starting 'clean'...
[gulp] Starting 'styles'...
[gulp] Starting 'scripts'...
[gulp] Starting 'connect'...
[gulp] Finished 'connect' after 68 ms
Started connect web server on http://localhost:9000
[gulp] Finished 'scripts' after 181 ms
[gulp] gulp-size: total 128.75 kB
[gulp] Finished 'styles' after 806 ms
[gulp] Starting 'serve'...
[gulp] Finished 'serve' after 5.73 ms

И я не понимаю, в чем моя проблема.

Мой gulpfile.coffee:

"use strict"

gulp = require("gulp")
$ = require("gulp-load-plugins")()

gulp.task "styles", ->
  gulp.src("app/styles/main.scss").pipe($.sass()).pipe($.autoprefixer("last 1 version")).pipe(gulp.dest(".tmp/styles")).pipe $.size()

gulp.task "scripts", ->
  gulp.src("app/scripts/**/*.coffee").pipe($.coffee()).pipe gulp.dest(".tmp/scripts")

gulp.task "html", [
  "styles"
  "scripts"
], ->
  jsFilter = $.filter("**/*.js")
  cssFilter = $.filter("**/*.css")
  gulp.src("app/*.html").pipe($.useref.assets()).pipe(jsFilter).pipe($.uglify()).pipe(jsFilter.restore()).pipe(cssFilter).pipe($.csso()).pipe(cssFilter.restore()).pipe($.useref.restore()).pipe($.useref()).pipe(gulp.dest("dist")).pipe $.size()

gulp.task "clean", ->
  gulp.src([
    ".tmp"
    "dist"
  ],
    read: false
  ).pipe $.clean()

gulp.task "build", [
  "html"
  "fonts"
]
gulp.task "default", ["clean"], ->
  gulp.start "build"

gulp.task "connect", ->
  connect = require("connect")
  app = connect().use(require("connect-livereload")(port: 35729)).use(connect.static("app")).use(connect.static(".tmp")).use(connect.directory("app"))
  require("http").createServer(app).listen(9000).on "listening", ->
    console.log "Started connect web server on http://localhost:9000"

gulp.task "serve", [
  "styles"
  "scripts"
  "connect"
], ->
  require("opn") "http://localhost:9000"

gulp.task "watch", [
  "clean"
  "serve"
], ->
  server = $.livereload()
  gulp.watch([
    "app/*.html"
    ".tmp/styles/**/*.css"
    ".tmp/scripts/**/*.js"
  ]).on "change", (file) ->
    server.changed file.path

  gulp.watch "app/styles/**/*.scss", ["styles"]
  gulp.watch "app/scripts/**/*.coffee", ["scripts"]

Ответ 1

Я использовал gulp-webserver. Это делает использование LiveReload очень простым.

gulp = require 'gulp'
webserver = 'gulp-webserver'
path = 'path'

gulp.task "webserver", ->
    gulp.src(path.resolve("./dist")).pipe webserver(
        port: "8080"
        livereload: true
    )

Ответ 2

Я использую gulp и с загрузкой в ​​потоке, и все они отлично работают.
посмотрите здесь. Это задача сервера, которую я использую для цели. Он полностью работает.

Отсканировано

http = require "http"
path = require "path"
Promise = Promise or require("es6-promise").Promise
express = require "express"
gulp = require "gulp"
{log} = require("gulp-util")
tinylr = require "tiny-lr"
livereload = require "gulp-livereload"

ROOT = "dist"
GLOBS = [path.join(ROOT, "/**/*")]
PORT = 8000
PORT_LR = PORT + 1

app = express()
app.use require("connect-livereload") {port: PORT_LR}
app.use "/", express.static "./dist"

http.createServer(app).listen PORT, ->
  log "Started express server on http://localhost: #{PORT}"

lrUp = new Promise (resolve, reject) ->
  lrServer = tinylr()
  lrServer.listen PORT_LR, (err) ->
    return reject(err)  if err
    resolve lrServer

gulp.watch GLOBS, (evt) ->
  return if evt.type is "deleted"

  lrUp.then (lrServer) ->
    log "LR: reloading", path.relative(ROOT, evt.path)
    gulp.src(evt.path).pipe livereload(lrServer)

Примечание. Я использую другой порт для работы с пером (9001). Я делаю это, потому что часто вы хотите, чтобы несколько экземпляров сервера печеночной нагрузки работали параллельно. Рекомендуется использовать порт 35729 только в том случае, если вы используете расширение браузера, с которым вы не пользуетесь промежуточным программным обеспечением соединения.

Надеюсь, что это поможет

Ответ 3

Живая перезагрузка очень проста в использовании gulp и выражает код ниже

var gulp = require('gulp'); 
gulp.task('express', function() {   
  var express = require('express');
  var app = express();   
  app.use(require('connect-livereload')({port: 4002}));
  app.use(express.static(__dirname));   
  app.listen(4000); 
});


var tinylr; 
gulp.task('livereload', function() {   
 tinylr = require('tiny-lr')();   
 tinylr.listen(4002); 
});


function notifyLiveReload(event) {   
 var fileName = require('path').relative(__dirname, event.path);   
 tinylr.changed({
        body: {
          files: [fileName]
        }  
    });
}

gulp.task('watch', function() {  
  gulp.watch('*.html', notifyLiveReload);  
  gulp.watch('js/*.js', notifyLiveReload);    
  gulp.watch('css/*.css', notifyLiveReload); 
});

gulp.task('default', ['express', 'livereload', 'watch'], function() {

});

когда вы меняете файл html, js и css, он перезагружает

Ответ 4

Я изначально предлагал изменить порт, однако функция "Печенье" не предпочитает это как вариант. Что вам нужно сделать, так это убить службу, запущенную на порту 35729, вы делаете это, запустив следующую команду с терминала:

lsof -iTCP:35729

Затем вы получите список прогонов, запущенных на этом порту, выберите первый PID в списке, то есть 3996, затем запустите эту команду:

 kill -9 3996

Теперь запустите ваш gulp script снова, и он не будет конфликтовать.