2016-11-08 39 views
0

之後重新加載似乎有什麼我想念 - 我只是試圖讓這個項目的CSS注入工作。瀏覽器同步重新加載注入工程,但在

服務器代理工作 文件觀察家也 注射作品, 但頁面重新加載總是半秒後...

IM在MAC OSX 10.11.6(15G1108) 節點V4.1.1

這裏是我的gulpfile:

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

var plumber = require('gulp-plumber'); 
var notify = require("gulp-notify"); 

var src = { 
scss: 'assets/scss/**', 
css: 'assets/css/', 
html: 'app/*.html' 
}; 

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

browserSync.init({ 
    proxy: "intouch.local", 
    open: false, 
    reloadOnRestart: false, 
    injectChanges: true, 
}); 

gulp.watch(src.scss, ['sass']); 
}); 

gulp.task('sass', function() { 

var onError = function(err) { 
     notify.onError({ 
        title: "Gulp", 
        subtitle: "Failure!", 
        message: "Error: <%= error.message %>", 
        sound: "Beep" 
       })(err); 

     this.emit('end'); 
    }; 


return gulp.src(src.scss) 
    .pipe(plumber({errorHandler: onError})) 
    .pipe(sass()) 
    .pipe(gulp.dest(src.css)) 
    // NOTE: i've tried with all of these lines, all do the same... 
    // .pipe(reload({stream: true})) 
    // .pipe(browserSync.stream()) 
    .pipe(browserSync.reload({ 
      stream: true 
     })) 
    .pipe(notify({ 
     title: 'Gulp', 
     subtitle: 'success', 
     message: 'Sass task', 
     sound: "Pop" 
    })); 
}); 

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

回答

2

調整要編譯只匹配.scss的SASS文件中的glob(或.sass)文件:

例如在您的代碼示例中將assets/scss/**更改爲assets/scss/**/*.scss

廣泛的glob可能導致意外的文件(通常爲源映射)傳遞到管道和Browsersync的默認行爲,當遇到無法流式傳輸的修改後的文件將重新加載頁面,因此您可以成功注入CSS然後重新加載一些你可能沒有想到/不關心的文件。

+1

除了源地圖,其他潛在的元兇可能是目錄和隱藏文件(例如'.gitignore')。在管道到SASS之前使用更具體的glob或過濾文件修復了迄今爲止遇到的所有情況。 – thewildandy

+0

所以如果我的scss文件夾包含一個帶有「partials」的子文件夾,並且在scss文件夾的根目錄下有一個主scss文件,這是否是正確的方法來觀察這些文件:'gulp.watch(「scss/*。scss」, [ 'SASS']); gulp.watch(「scss/*/*。scss」,['sass']); – ulumi

+0

@ulumi個人我會使用'scss/**/*。scss'。雙星部分將允許您使用任何您想要的子目錄,並且'* .scss'部分將確保沒有任何意外通過該過濾器。 – thewildandy

相關問題