自动加载css与Browersync

Auto reload css with Browersync

本文关键字:Browersync css 加载      更新时间:2023-09-26

当我更改我的main.scss文件时,我似乎无法实现自动重新加载Browersync。我已经得到了Browsersync重新加载浏览器自动在html的变化,但不是css

使用gulp作为任务管理器。我在这里错过了什么让浏览器重新加载css更改后?或者在css更改后,是否Browersync和gulp集成不支持重新加载?

我在谷歌上搜索了一下这个话题,我注意到还有一些人也收到了同样的问题。

如果我弄不清楚,你会建议我用什么来自动加载css的变化?Chromedev工具吗?Nodemon吗?还是Chrome扩展?

这是我的gulpfile

// refferance gulp
var gulp = require('gulp');
// browser-sync
var browserSync = require('browser-sync');
var reload = browserSync.reload;
// other packages installed
var concat = require('gulp-concat');
var cssmin = require('gulp-minify-css');
var rename = require('gulp-rename');
var scss = require('gulp-sass');
var uglify = require('gulp-uglify');
var source = {
    scss: './/src/scss/*.scss',
    css: './/dest/css/*.css',
    html: './*.html'
};
// browser-sync task
gulp.task('browser-sync',['styles'], function(){
    browserSync({
        server:'./'
    });
    gulp.watch(source.scss,['scss']);
    gulp.watch(source.html).on('change',reload);
});
// scripts task
gulp.task('scripts', function(){
    // fetch all files in the .js extension in the /src/js directory
    return gulp.src('./src/js/*.js')
    // concatinate files and save as app.js
    .pipe(concat('app.js'))
    // save app.js in dest directory
    .pipe(gulp.dest('./dest/js/'))
    .pipe(uglify())
    // minfiy file and rename to app.min.js
    .pipe(rename({
        suffix: '.min'
    }))
    // save in dest directory
    .pipe(gulp.dest('./dest/js'));
});

// styles task
gulp.task('styles', function(){
     // fetch all files with scss extension in /src/scss directory
    return gulp.src('./src/scss/*.scss')
    // compile scss
    .pipe(scss())
    // output css in css dest directory
    .pipe(gulp.dest('./dest/css/'))
    // minify css
    .pipe(cssmin())
    // rename as styles.min.css
    .pipe(rename({
        suffix: '.min'
    }))
    // save in same directory
    .pipe(gulp.dest('./dest/css'))
    // injecting css into browser via browsersync
    .pipe(reload({stream:true}));
});
// we use the watch task in the default task bellow
gulp.task('watch',function(){
    // watch js
    gulp.watch('./src/js/*.js',['scripts']);
    // watch scss
    gulp.watch('./src/scss/*.scss',['styles']);
});
// default task allows us to run all tasks at once by just runing `gulp` in command line
gulp.task('default', ['scripts', 'styles', 'browser-sync', 'watch']);

您的浏览器同步包含scss gulp.watch指向gulpfile.js中不存在的scss任务。考虑使用您的watch任务中的gulp.watch

gulp.task('browser-sync',['styles'], function(){
    browserSync({
        server:'./'
    });
    gulp.watch('./src/scss/*.scss',['styles']);
    gulp.watch(source.html).on('change',reload); 
});

这个问题并没有真正解决,正如我们在Slack上讨论的那样,这里有一个更合适的解决方案,即注入CSS而不是重新加载浏览器。

var gulp        = require('gulp'),
    browserSync = require('browser-sync').create(),
    reload      = browserSync.reload,
    concat      = require('gulp-concat'),
    cssmin      = require('gulp-minify-css'),
    rename      = require('gulp-rename'),
    sass        = require('gulp-sass'),
    uglify      = require('gulp-uglify');
var source = {
    styles: 'src/scss/*.scss',
    js:'src/js/*.js',
    html: '*.html'
};
var destination = {
    styles: 'dest/css',
    js: 'desc/js'
};  
gulp.task('serve', function(){
    browserSync.init({
        server:'./'
    });
});
gulp.task('scripts', function(){
    return gulp.src(source.js)
    .pipe(concat('app.js'))
    .pipe(uglify())
    .pipe(rename({
        suffix: '.min'
    }))
    .pipe(gulp.dest(destination.js))
    .pipe(reload());
});
gulp.task('styles', function(){
    return gulp.src(source.styles)
    .pipe(sass())
    .pipe(cssmin())
    .pipe(rename({
        suffix: '.min'
    }))
    .pipe(gulp.dest(destination.styles))
    .pipe(reload({stream:true}));
});
gulp.task('watch',function(){
    gulp.watch(source.js,['scripts']);
    gulp.watch(source.scss,['styles']);
});
gulp.task('default', ['scripts', 'styles', 'serve', 'watch']);

问题解决:)

scss更改现在正在触发浏览器重新加载!

使用我的source对象链接到scss的更改,并在我的scss文件上调用gulp.watch(source.scss).on('change',reload);

// path to files
var source = {
    scss: './src/scss/*.scss',
    css: './dest/css/*.css',
    html: './*.html'
};
// serve task 
gulp.task('serve',['styles'], function(){
    browserSync.init({
        server:'./'
    });
    // firing a browser reload on changes to these files
    gulp.watch(source.scss).on('change',reload);
    gulp.watch(source.html).on('change',reload);
});

然后在我的styles任务中,我确保 .pipe(gulp.dest('./dest/css'))

之后调用 .pipe(browserSync.stream());

最后我引用serve在我的default gulp任务

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

然后在命令行中输入,奇迹就发生了!csshtml的变化反映:)