【问题标题】:Gulp Browsersync task not reloading on file changes with new file structureGulp Browsersync 任务未使用新文件结构重新加载文件更改
【发布时间】:2016-12-04 16:19:48
【问题描述】:

将我的项目更改为src/dist/ 文件夹后,我的更改没有被编译,我的浏览器同步任务不再重新加载页面。例如,如果我更改 div 的颜色,即使我停止并重新启动 gulp 任务,颜色也不会更新。所以我的问题是,如何更改我的 gulp 任务以监视我正在使用的新文件结构的更改,以及一旦监视任务识别出对文件的更改,我如何触发重新加载任务?我认为重新加载任务有效,在此 gulpfile gulp.watch 的先前工作版本上工作,所以它似乎不是问题。我尝试根据this 的答案将gulp.watch 更改为browserSync.watch,但这并没有解决问题。

我猜这是我的监视任务或 browsersync.init 的问题,但我完全被难住了。

明确地说,我正在使用 Jade、Bourbon Neat、SCSS、Gulp 和 Browsersync 制作一个静态网页。

如果有帮助,这里是 a link 到此项目的完整 GitHub 存储库!

这是我当前的文件结构:

/
  dist/
    css/
    js/
    index.html
  node_modules/
  src/
    jade/
    js/
    scss/
  .gitignore
  gulpfile.js
  package.json

这是我的gulpfile.js

// VARIABLES

var gulp                    = require('gulp');
var jade                    = require('gulp-jade');
var sass                    = require('gulp-sass');
var sourcemaps              = require('gulp-sourcemaps');
var autoprefixer            = require('gulp-autoprefixer');
var cssmin                  = require('gulp-cssmin');
var neat                    = require('node-neat').includePaths;
var concat                  = require('gulp-concat');
var uglify                  = require('gulp-uglify');
var rename                  = require('gulp-rename');
var browserSync             = require('browser-sync');
var reload                  = browserSync.reload;


// TASKS



// Jade task
gulp.task('jade', function() {
    return gulp.src('src/jade/**/*.jade')
    .pipe(jade({ pretty: true }))
    .pipe(gulp.dest('dist/'))
});


// SCSS task
gulp.task('scss', function() {
    return gulp.src('src/scss/**/*.scss')
    .pipe(sass({ style: 'compressed', 
        noCache: true,
        includePaths: neat }))
    .pipe(autoprefixer())
    .pipe(cssmin())
    .pipe(rename({
        suffix: '.min'
    }))
    .pipe(gulp.dest('dist/css'))
});

// JS task
gulp.task('js', function() {
    return gulp.src('src/js/**/*.js')
    .pipe(uglify())
    .pipe(rename({
        suffix: '.min'
    }))
    .pipe(gulp.dest('dist/js/'))
});

// Watch files for changes
gulp.task('watch', ['browser-sync'], function() {
    gulp.watch('dist/**/*.html', reload);
    gulp.watch('src/scss/**/*.scss', ['scss', reload]);
    gulp.watch('src/**/*.jade', ['jade']);
    gulp.watch('src/**/*.js', ['js']);
});

// Start Browsersync server
gulp.task('browser-sync', function() {
    browserSync.init(['dist/css/**/*.css', 'dist/js/**/*.js'], {
        server: {
            baseDir: "dist/"
        }
    });
});

// Default task
gulp.task('default', ['scss', 'jade', 'js', 'watch', 'browser-sync']);

【问题讨论】:

标签: javascript sass gulp browser-sync neat


【解决方案1】:

对我有用的是将gulp.watch 切换为browserSync.watch。 BrowserSync 的文档表明此功能至少需要 2.6.0 版本。因此,如果您不使用 BrowserSync 版本,则可能需要更新该版本。

【讨论】:

    【解决方案2】:

    我已经提取了你的 repo 并进行了一些修复,将推送到“修复”分支下。几件事:

    • 您的 index.html 引用了您未缩小的 css,而您只导出了缩小的 CSS。
    • 监视列表需要子文件夹前缀,所以gulp.watch('src/js/**/*.js', ['js']); 而不是gulp.watch('src/**/*.js', ['js']);
    • 您的 browserSync.init 引用了错误的目录(src 而不是 dist)。

    【讨论】:

    • 非常感谢!我以为我尝试了所有这些更改,但事实证明我没有将它们中的每一个都尝试在一起。你摇滚! ??
    猜你喜欢
    • 2018-09-04
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-07
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多