代码之家  ›  专栏  ›  技术社区  ›  tobiasg

在4号峡谷上设置峡谷沙司

  •  0
  • tobiasg  · 技术社区  · 6 年前

    在对package.json文件中的依赖项进行了一些升级之后,我最近将Gulp更新到了版本4。我在用新的gulp.series/gulp.parallel设置它时遇到了问题,因此它的工作方式与升级之前一样。

    这就是我 Gulpfile.js 现在看来:

    const gulp = require('gulp'),
          sass = require('gulp-sass'),
          autoprefixer = require('gulp-autoprefixer'),
          cleanCSS = require('gulp-clean-css'),
          browserSync = require('browser-sync').create();
    
    gulp.task('styles', gulp.series(function() {
        gulp.src('sass/**/*.scss')
            .pipe(sass().on('error', sass.logError))
            .pipe(cleanCSS({compatibility: 'ie8'}))
            .pipe(autoprefixer({
                browsers: ['last 2 versions'],
                cascade: false,
                grid: "no-autoplace"
            }))
            .pipe(gulp.dest('./css/'))
            .pipe(browserSync.stream());
    }));
    
    //Watch task
    gulp.task('default', gulp.parallel('styles',function() {
        gulp.watch('sass/**/*.scss',gulp.parallel('styles'));
        gulp.watch("*.html").on('change', browserSync.reload);
    }));
    
    gulp.task("sync", gulp.parallel("default",function(){
        browserSync.init({
            server: "./",
            notify: false
        });
    }));
    

    这就是我升级到第4版之前的样子,当它像我希望的那样工作时:

    const gulp = require('gulp'),
          sass = require('gulp-sass'),
          autoprefixer = require('gulp-autoprefixer'),
          cleanCSS = require('gulp-clean-css'),
          browserSync = require('browser-sync').create();
    
    gulp.task('styles', function() {
        gulp.src('sass/**/*.scss')
            .pipe(sass().on('error', sass.logError))
            .pipe(cleanCSS({compatibility: 'ie8'}))
            .pipe(autoprefixer({
                browsers: ['last 2 versions'],
                cascade: false
            }))
            .pipe(gulp.dest('./css/'))
            .pipe(browserSync.stream());
    });
    
    //Watch task
    gulp.task('default',function() {
        gulp.watch('sass/**/*.scss',['styles']);
        gulp.watch("*.html").on('change', browserSync.reload);
    });
    
    gulp.task("sync", ["default"], function(){
        browserSync.init({
            server: "./",
            notify: false
        });
    })
    

    我希望它的行为方式显然是在保存时将SCSS文件编译成CSS。部分地,这是有效的。当编辑 main.scss 文件(位于 sass/main.scss ,CSS会像我想要的那样立即生成,每次保存时都会生成新的CSS。但是如果我编辑了部分文件 sass/partials/_file.scss ,它只在开始吞咽后的第一次保存时起作用。如果我再次尝试保存,则更改不会作为CSS生成,并且终端日志不会更新为新的时间戳。

    我想我把gulp.series/gulp.parallel设置错了。我怀疑我必须把这个应用到 pipe 方法,但我不知道怎么做。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark    6 年前

    有两件事需要改变:

    gulp.task('styles', gulp.series(function() {
       gulp.src('sass/**/*.scss')
    

    更改为

    gulp.task('styles', function() {
        return gulp.src('sass/**/*.scss')
        …
    });
    

    这里不需要gulp.series并添加return语句。另外,我建议最终走全功能路线,而不是使用gulp.task。

    如果有帮助,请告诉我们。