2015-07-01 21 views
15

Jestem nowicjuszem w Gulp i chciałem skorzystać z jego automatycznej kompilacji scss i synchronizacji przeglądarki. Ale nie mogę zmusić go do działania.Przeglądarka-sync nie odświeża strony po zmianach z Gulpem

rozebrałem wszystko w dół, aby pozostawić tylko zawartość przykład na stronie internetowej Browsersync:

http://www.browsersync.io/docs/gulp/#gulp-sass-css

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

// Static Server + watching scss/html files 
gulp.task('serve', ['sass'], function() { 

    browserSync.init({ 
     server: "./app" 
    }); 

    gulp.watch("app/scss/*.scss", ['sass']); 
    gulp.watch("app/*.html").on('change', browserSync.reload); 
}); 

// Compile sass into CSS & auto-inject into browsers 
gulp.task('sass', function() { 
    return gulp.src("app/scss/*.scss") 
     .pipe(sass()) 
     .pipe(gulp.dest("app/css")) 
     .pipe(browserSync.stream()); 
}); 

gulp.task('default', ['serve']); 

mogę zadzwonić łyk służyć. Witryna jest wyświetlana i otrzymuję komunikat od Browsersync. Kiedy modyfikuję HTML, strona jest przeładowywana. Kiedy jednak zmodyfikować SCSS, widzę to:

[BS] 1 file changed (test.css) 
[15:59:13] Finished 'sass' after 18 ms 

ale muszę przeładować ręcznie. czego mi brakuje?

Odpowiedz

14

Wystarczy wprowadzić zmiany zamiast wymusić pełne odświeżanie przeglądarki na SASS kompilacji, jeśli chcesz.

browserSync.init({ 
    injectChanges: true, 
    server: "./app" 
}); 

gulp.task('sass', function() { 
    return gulp.src("app/scss/*.scss") 
     .pipe(sass()) 
     .pipe(gulp.dest("app/css")) 
     .pipe(browserSync.stream({match: '**/*.css'})); 
}); 
+0

Szkoda, że ​​to nie było łatwiejsze. Gdybym nie natknął się na twoją odpowiedź, nigdy bym się tego nie domyślił z konfiguracją MAMP/Gulp ... – BenRacicot

+0

Zastanawiam się, dlaczego moja strona nie ładuje się, ale w rzeczywistości to było wstrzykiwanie css .. miło. – Santosh

5

To dlatego, że dzwonisz pod numer browserSync.reload na zegarze html, a nie na zegarku.

Spróbuj tego:

gulp.watch("app/scss/*.scss", ['sass']).on('change', browserSync.reload); 
gulp.watch("app/*.html").on('change', browserSync.reload); 
+0

Masz rację. Myślałem, że to jest dzieło '.pipe (browserSync.stream())'. Dzięki. – raichu

+0

cieszę się, że mogę pomóc :) –

5

To właśnie używam i to działa w porządku w Sass lub inne pliki

gulp.task('browser-sync', function() { 
    var files = [ 
     '*.html', 
     'css/**/*.css', 
     'js/**/*.js', 
     'sass/**/*.scss' 
    ]; 

    browserSync.init(files, { 
     server: { 
     baseDir: './' 
     } 
    }); 
}); 
+0

Myślę, że ta odpowiedź jest lepsza; jednak w moim przypadku (być może dlatego, że używam proxy), nie mogę użyć wzorca globu "./**/*". – bozdoz

+1

^Zdaję sobie teraz sprawę, że moim problemem było to, że oglądałem katalog node_modules – bozdoz

+0

, to jest najprostsza możliwa odpowiedź i nadal działa po wyjęciu z pudełka z najnowszą stabilną synchronizacją przeglądarki. – Mario

0

I obejmuje to na moim html, tuż poniżej znacznika body. To działa.

<script type='text/javascript' id="__bs_script__">//<![CDATA[ 
document.write("<script async src='http://HOST:3000/browser-sync/browser-sync-client.2.11.1.js'><\/script>".replace("HOST", location.hostname));//]]> 
</script> 
2

uruchomiony na ten sam problem próbuje przeładować php i js plików i strumień css plików. Byłem w stanie używać strumienia tylko przy użyciu metody pipe, co ma sens. W każdym razie, oto co pracował dla mnie:

gulp.watch(['./**/*.css']).on('change', function (e) { 
    return gulp.src(e.path) 
     .pipe(browserSync.stream()); 
}); 

Ale faktycznie wolę @ odpowiedź Pixie jest modyfikowany:

gulp.task('default', function() { 
    var files = [ 
      './**/*' 
     ]; 
    browserSync.init({ 
     files : files, 
     proxy : 'localhost', 
     watchOptions : { 
      ignored : 'node_modules/*', 
      ignoreInitial : true 
     } 
    }); 
}); 
+0

Dzięki, to działa dla mnie. Cheerz. –

0

miałem również ten sam problem. Zadziałało, gdy nazwałem metodę ponownego ładowania jako oddzielne zadanie.

gulp.task('browserSync', function() { 
    browserSync.init(null, { 
    server: { 
     baseDir: './' 
    }, 
    }); 
}) 

gulp.task('reload', function(){ 
    browserSync.reload() 
}) 

gulp.task('watch', ['sass', 'css', 'browserSync'], function(){ 
    gulp.watch('*.html', ['reload']); 
}) 
6

ja też do czynienia z podobnym problemem, kiedy było nowe zwyczaje przeglądarce synchronizacji, wiersza polecenia mówił „przeładowywania przeglądarek”, ale przeglądarka nie została odświeżona w ogóle, problem został miałem nieuwzględnione ciało tag na mojej stronie HTML, gdzie synchronizacja przeglądarki może wstrzyknąć skrypt ze względu na jego funkcjonalność, upewnij się, że strona HTML ma tag body.

+0

Dzięki za edycję @Eric Aya – SU15

+0

Dziękuję za uratowanie mnie dni frustracji. Szczerze mówiąc to nie ma nic wspólnego z Gulpem, więc prawdopodobnie zasługuje na własne pytanie/odpowiedź, ponieważ wiem, że nie jestem jedynym, który pierwszy testował to w leniwy sposób za pomocą prostego pliku "index.html" bez tagów i zastanawiał się .. .Hej dlaczego to nie działa? – neuronet