【问题标题】:Gulp won't recompile sass when changes are made进行更改时,Gulp 不会重新编译 sass
【发布时间】:2020-06-10 08:00:53
【问题描述】:

我创建了一些任务,以便在进行更改时使用浏览器同步重新编译 sass。 我的 gulp 文件如下:

'use strict';

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

gulp.task('sass', function() {
    return gulp.src('./css/*.scss')
        .pipe(sass().on('error', sass.logError))
        .pipe(gulp.dest('./css'));
});

gulp.task('sass:watch', function() {
    gulp.watch('./css/*.scss', ['sass']);
});

gulp.task('browser-sync', function() {
    var files = [
        './*.html',
        './css/*.css',
        './img/*.{png,jpg,gif}',
        './js/*.js'
    ];

    browserSync.init(files, {
        server: {
            baseDir: "./"
        }
    });

});


gulp.task('default', gulp.series('browser-sync', function() {
    gulp.start('sass:watch');
}));

我正在使用节点版本 12.16.1、gulp-sass 版本 4.1.0、gulp-cli 版本 2.3.0、gulp 本地版本 4.0.2 和浏览器同步版本 2.26.7。

【问题讨论】:

    标签: node.js sass gulp gulp-watch


    【解决方案1】:

    改变这个

    // gulp.task('default', gulp.series('browser-sync', function() {
    //     gulp.start('sass:watch');
    // }));
    

    gulp.task('default', gulp.series('browser-sync', 'sass:watch'));
    

    我严重怀疑 gulp v4 是否支持gulp.start

    也改成这样:

    gulp.task('browser-sync', function(done) {   // added done here
        var files = [
            './*.html',
            './css/*.css',
            './img/*.{png,jpg,gif}',
            './js/*.js'
        ];
    
        browserSync.init(files, {
            server: {
                baseDir: "./"
            }
        });
      done();                                    // called done() here
    });
    

    当我运行您的代码时,我注意到sass:watch 任务从未启动,因此您根本没有观看任何文件。以下是您应该在终端中看到的内容:

    [21:26:21] Using gulpfile ~\OneDrive\Test Bed\simple\gulpfile.js
    [21:26:21] Starting 'default'...
    [21:26:21] Starting 'browser-sync'...
    [21:26:21] Finished 'browser-sync' after 164 ms
    [21:26:21] Starting 'sass:watch'...         // this line missing when running your code
    [Browsersync] Access URLs:
     -----------------------------------
           Local: http://localhost:3000
        External: http://10.0.0.186:3000
     -----------------------------------
              UI: http://localhost:3001
     UI External: http://localhost:3001
     -----------------------------------
    [Browsersync] Serving files from: ./
    [Browsersync] Watching files...
    

    不要被最后一行骗了,browser-sync 总是把它吐出来。 sass:watch 任务没有启动的原因是因为 gulp 永远无法通过 browser-sync 任务 - 你必须以某种方式向 gulp 发出任务已完成的信号,而 done 是一种方法。然后 gulp 可以进行下一个任务,即sass:watch。见gulp: async completion

    您还需要进行您在评论gulp.watch('./css/*.scss', gulp.series('scss'));中注明的更改

    您的代码没有其他问题 - 它对我来说运行得非常好。

    【讨论】:

    • 非常感谢您的详细解释。这就像一个魅力!
    • 很高兴它成功了 - 我刚刚发布了它! (不介意点赞;>})
    【解决方案2】:

    进行更改时,您的 Gulpfile 没有查看 sass 文件。它只是在寻找 CSS 更改。这是我的 Gulp 任务功能的一部分,用于查找 SCSS 文件更改

    function serve() {
      browserSync.init({
        open: false,
        port: 8000,
        server: {
          baseDir: 'src/',
          index: 'index.html'
        },
      });
      gulp.watch(paths.scss.src, gulp.series([compileSCSS]));
    }
    

    这是我的 SCSS 编译函数

    function compileSCSS() {
      return gulp
        .src('./src/scss/style.scss')
        .pipe(plugins.rename('style.css'))
        .pipe(gulp.dest('./src/css/'));
    }
    

    我已经准备了一个包含许多必需工具的 Gulp 函数。你可以在这里查看 https://gist.github.com/choyan/ab034dc0539942ee0d8f0ab9788d790f

    【讨论】:

    • 非常感谢您的回答。但我是一个完整的新手,我正在学习一个旧教程,我不明白我应该在我的代码中做些什么改变。您能否指出我将在现有代码中做哪些更改以使其正常工作?
    • 我尝试改变 gulp.watch('./css/*.scss', ['sass']); 的行到 gulp.watch('./css/*.scss', gulp.series('scss'));因为我正在使用 gulp 4。但它仍然无法正常工作。
    • @Zahidul 观看./css/*.scss 你可能没有看到*.scss 部分。所以手表是正确的。
    猜你喜欢
    • 1970-01-01
    • 2015-09-22
    • 2015-02-09
    • 1970-01-01
    • 2016-04-27
    • 2016-01-30
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多