2016-11-03 2 views
2

GulpとBrowsersyncを再ロードせずにCSSの変更を注入するように設定しようとしています。添付されたGulpfile.jsは、SASSタスクの後に.pipe(browserSync.stream())を呼び出しています。我々はそれが注入を参照してください、しかし、その後、完全なリロードを呼び出します。GulpとBrowsersyncがCSSを注入していますが、完全な再ロードを引き起こします

/** 
* Gulpfile 
*/ 
var gulp = require('gulp'); 
var gutil = require('gulp-util'); 
var sass = require('gulp-sass'); 
var watch = require('gulp-watch'); 
var notify = require('gulp-notify'); 
var browserSync = require('browser-sync'); 
var sourcemaps = require('gulp-sourcemaps'); 
var uglify = require('gulp-uglify'); 
var fs = require("fs"); 
var exec = require('child_process').exec; 
var config = require("./config"); 
var appDir = 'web' 

/** 
* If config.js exists, load that config for overriding certain values below. 
*/ 
function loadConfig() { 
    if (fs.existsSync(__dirname + "/./config.js")) { 
     config = {}; 
     config = require("./config"); 
    } 

    return config; 
} 

loadConfig(); 

/* 
* This task generates CSS from all SCSS files and compresses them down. 
*/ 
gulp.task('sass', function() { 
    return gulp.src(appDir + '/anonymous/scss/**/*.scss') 
     .pipe(sourcemaps.init()) 
     .pipe(sass({ 
      noCache: true, 
      outputStyle: "compressed", 
      lineNumbers: false, 
      loadPath: appDir + '/anonymous/css/*', 
      sourceMap: true 
     })).on('error', function(error) { 
      gutil.log(error); 
      this.emit('end'); 
     }) 
     .pipe(sourcemaps.write(appDir + '/anonymous/maps')) 
     .pipe(gulp.dest(appDir + '/anonymous/css')) 
     .pipe(browserSync.stream()) 
     .pipe(notify({ 
      title: "SASS Compiled", 
      message: "All SASS files have been recompiled to CSS.", 
      onLast: true 
     })) 
     ; 
}); 


/** 
* Define a task to spawn Browser Sync. 
* Options are defaulted, but can be overridden within your config.js file. 
*/ 
gulp.task('browser-sync', function() { 
    browserSync.init({ 
     port: config.browserSync.port, 
     proxy: config.browserSync.hostname, 
     open: config.browserSync.openAutomatically, 
     injectChanges: config.browserSync.injectChanges 
    }); 
}); 

/** 
* Defines the watcher task. 
*/ 
gulp.task('watch', function() { 
    // watch scss for changes 
    gulp.watch([ 
     appDir + '/anonymous/scss/**/*.scss', 
     appDir + '/secure/components/**/*.scss' 
    ], ['sass']); 

}); 

gulp.task('default', [ 
    'sass', 
    'watch', 
    'browser-sync' 
]); 

ここには、browsersyncコンフィグレーションで参照されるconfig.jsがあります。

module.exports = { 
    browserSync: { 
    hostname: "http://192.168.50.4:9080/site/secure", 
    port: 3000, 
    openAutomatically: true, 
    reloadDelay: 50, 
    injectChanges: true, 
    }, 
}; 

答えて

0

私は自分の質問に対する答えを見つけました。

ソースマップが生成されていて、ソースマップが再生されたときにbrowsersyncがsourcemapフォルダを監視しており、完全リフレッシュをトリガしています。これらの行を削除すると、SASSタスクの完全リフレッシュが停止します。

.pipe(sourcemaps.init()) 
    .pipe(sourcemaps.write(appDir + '/anonymous/maps')) 

リファレンス

https://github.com/BrowserSync/browser-sync/issues/235

関連する問題