首页 > 解决方案 > Gulp 错误:以下任务未完成:异步问题

问题描述

我是 gulp 的新手,在将 gulp-sass 更新到 5.0 后出现此错误。我尝试了与互联网不同的东西,但没有让它发挥作用。

Gulp 版本:4.0.0 Gulp 萨斯:5.0.0 萨斯:1.38.1

在此处输入图像描述

这是我的 gulpfile.js

var sourcemaps    = require('gulp-sourcemaps');
var mode          = require('gulp-mode')();
var browserSync   = require('browser-sync').create();
var sass          = require('gulp-sass')(require('sass'));
var $             = require('gulp-load-plugins')();
var autoprefixer  = require('autoprefixer');
var isProduction = mode.production();

var sassPaths = [
//   'node_modules/foundation-sites/scss',
//   'node_modules/motion-ui/src'
];


function sass() {
  return gulp.src('assets/sass/theme.scss')
    .pipe(mode.development(sourcemaps.init()))
    .pipe($.sass.sync(({
      includePaths: sassPaths,
      outputStyle: 'compressed' // if css compressed **file size**
    })).on('error', $.sass.logError))
    .pipe($.postcss([
      autoprefixer({ overrideBrowserslist: ['last 2 versions', 'ie >= 9'] })
    ]))
    .pipe(mode.development(sourcemaps.write()))
    .pipe(gulp.dest('assets/css'))
    .pipe(browserSync.stream());
};

function serve() {
    browserSync.init({
      server: "./"
    });
  gulp.watch("assets/sass/**/*.{scss,sass}", sass);
  gulp.watch("*.html").on('change', browserSync.reload);
}

gulp.task('sass', sass);
gulp.task('serve', gulp.series('sass', serve));
gulp.task('default', gulp.series('sass', serve));

if( isProduction ){
  gulp.task('default', gulp.series(sass));
}

标签: javascriptnode.jsasynchronoussassgulp

解决方案


你有几个问题:

  1. 不要命名你的任务sass和你的require对象sass。为其中一个选择不同的名称。

  2. 这很奇怪:

gulp.task('sass', sass);
gulp.task('serve', gulp.series('sass', serve));
gulp.task('default', gulp.series('sass', serve));

所有你需要的是

gulp.task('serve', gulp.series(sass2, serve));
gulp.task('default', gulp.series(sass2, serve));

只需使用您的任务名称,这里我只是将其重命名为sass2,无需将它们称为字符串。

此外,您的任务serve与您的任务没有什么不同default...


推荐阅读