【问题标题】:browser sync reloading injecting works, but reloads after浏览器同步重新加载注入工作,但重新加载后
【发布时间】:2016-12-14 19:43:48
【问题描述】:

似乎我缺少一些东西 - 我只是想让 css 注入在这个项目上工作。

服务器代理工作 文件监视器也是 注射工作, 但是页面总是在半秒后重新加载...

我在 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']);

【问题讨论】:

    标签: node.js sass gulp gulp-browser-sync


    【解决方案1】:

    调整要编译的 sass 文件的 glob,使其仅匹配 .scss(或 .sass)文件:

    例如在您的代码示例中将assets/scss/** 更改为assets/scss/**/*.scss

    广泛的 glob 可能会导致意外文件(通常是源映射)被传递到管道中,并且 Browsersync 在遇到无法流式传输的修改文件时的默认行为是重新加载页面,因此您可以成功注入CSS,然后对一些您可能没想到/不关心的文件进行硬重新加载。

    【讨论】:

    • 除了源映射之外,其他潜在的罪魁祸首可能是目录和隐藏文件(例如.gitignore)。在管道传输到 SASS 之前使用更具体的 glob 或过滤文件可以解决我迄今为止遇到的所有情况。
    • 因此,如果我的 scss 文件夹包含一个带有“partials”的子文件夹,并且在 scss 文件夹的根目录中包含一个主 scss 文件,那么这是观看文件的正确方法:`gulp.watch(" scss/*.scss", ['sass']); gulp.watch("scss/*/*.scss", ['sass']);
    • @ulumi 我个人会使用scss/**/*.scss。双星部分将允许您使用您喜欢的任何子目录,*.scss 部分将确保没有意外通过过滤器。
    • @ulumi 我应该澄清一下,我上面的建议也将允许您继续使用主“scss”目录,例如scss/master.scss
    猜你喜欢
    • 2017-11-08
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2023-04-09
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多