Задача не определена: переход с gulpV3 на gulpV4

#javascript #npm #sass #gulp #gulp-4

#javascript #npm #дерзость #глоток #gulp-4

Вопрос:

Мне пришлось обновить старый проект с версии gulp 3.9.1 до версии gulp 4, что потребовало от меня переписать мои задачи. Я следовал документации для перехода к gulp.series и перехода к функциям имен, но теперь я все еще получаю ошибки при запуске. Ниже приведен мой код, который я использую для просмотра стилей на двух разных языках.

 var fontName = "project-icons",
    gulp = require("gulp"),
    sass = require("gulp-sass"),
    sourcemaps = require("gulp-sourcemaps"),
    iconfont = require("gulp-iconfont"),
    iconfontCss = require("gulp-iconfont-css");

var sassOptions = {
    errLogToConsole: true,
    outputStyle: "expanded"
};

function iconfont(done) {
    gulp.src(["./icons/*.svg"])
        .pipe(
            iconfontCss({
                fontName: fontName,
                path: "sass",
                targetPath: "../sass/static/icons/_icons.sass",
                fontPath: "./fonts/",
                cssClass: "icon"
            })
        )
        .pipe(
            iconfont({
                formats: ["ttf", "eot", "woff", "woff2", "svg"],
                fontName: fontName,
                normalize: true,
                fixedWidth: true,
                centerHorizontally: true
            })
        )
        .on("glyphs", function(glyphs, options) {})
        .pipe(gulp.dest("./fonts/"));
    done();
}

function desktop_styles() {
    return gulp
        .src("./sass/_en/style.sass")
        .pipe(
            sourcemaps.init({
                loadMaps: true,
                identityMap: true,
                sourceRoot: "../css/"
            })
        )
        .pipe(sass(sassOptions).on("error", sass.logError))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest("./css/"));
}

function desktop_styles_rtl() {
    return gulp
        .src("./sass/_ar/style.sass")
        .pipe(
            sourcemaps.init({
                loadMaps: true,
                identityMap: true,
                sourceRoot: "../css/"
            })
        )
        .pipe(sass(sassOptions).on("error", sass.logError))
        .pipe(sourcemaps.write())
        .pipe(gulp.dest("./css/lang/rtl"));
}

function mobile_styles() {
    return gulp
        .src("./sass/en/mobile/style.sass")
        .pipe(sass(sassOptions).on("error", sass.logError))
        .pipe(gulp.dest("./css/m"));
}

function mobile_styles_rtl() {
    return gulp
        .src("./sass/rtl/m/style.sass")
        .pipe(sass(sassOptions).on("error", sass.logError))
        .pipe(gulp.dest("./css/lang/rtl/m"));
}

function watch_all(){
    gulp.series(
        mobile_styles,
        mobile_styles_rtl,
        desktop_styles,
        desktop_styles_rtl,
        function(done) {
            gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles));
            gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles_rtl));
            gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles));
            gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles_rtl));
            done();
        }
    )
};

function watch_AllDesktop(done){
    gulp.series(desktop_styles, desktop_styles_rtl, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles));
        gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles_rtl));
        done();
    });

function watch_desk_desktop_styles_rtl(done){
    gulp.series(desktop_styles_rtl, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles_rtl));
        done();
    });

function watch_desktop_en(done){
    gulp.series(desktop_styles, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(desktop_styles));
    });

function watch_mobile_rtl(done){
    gulp.series(mobile_styles_rtl, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles_rtl));
        done();
    });

function watch_mobile_en(done){
    gulp.series(mobile_styles, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles));
        done();
    });

function watch_AllMobile(done){
    gulp.series(mobile_styles, mobile_styles_rtl, function() {
        gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles));
        gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles_rtl));
        done();
    });
  

Когда я запускаю «gulp watch_all», я получаю задачу, которая так и не определена. Что-то не так с функциями или моим порядком кода?

Ответ №1:

  1. Все ваши функции от watch_AllDesktop до watch_AllMobile нуждаются в закрывающей скобке }

  2. Ваша основная проблема в том, что вы не экспортируете свою задачу

Задачи стажера экспортировать не требуется, но все ваши задачи, которые должны выполняться на консоли, должны иметь экспорт.

Поместите, например, следующий экспорт в конце gulpfile.js:

 exports.watch_all = watch_all;
  

После экспорта вы можете подтвердить с помощью gulp --tasks , какие задачи доступны для вас


редактировать (вопрос с комментарием)

У вашего watch не должно быть обратного вызова, потому что просмотр должен выполняться постоянно, а не только один раз.

 function watch_all(){
    gulp.watch("./sass/**/*.sass", gulp.series(mobile_styles, mobile_styles_rtl, desktop_styles, desktop_styles_rtl ));
}
  

Для дальнейших вопросов, пожалуйста, откройте новый вопрос с небольшими примерами и затронутым кодом. спасибо

Комментарии:

1. Спасибо за ответ! Это действительно исправило мою синтаксическую ошибку, однако у меня все еще возникают ошибки при запуске задачи. Сначала я получил сообщение «Вы забыли сообщить об асинхронном завершении?» ошибка, которую я исправил, добавив другой обратный вызов в мою функцию. Однако, когда я запускаю задачу, она завершается. Он не отслеживает постоянно мои файлы sass на предмет каких-либо изменений, и более того, когда я вношу изменения в любой файл sass, css не восстанавливается … не уверен, что происходит с задачами просмотра:/ Это мой обновленный код: jsfiddle.net/hrukegx1

2. Это сработало отлично 🙂 Спасибо за исправление и за то, что вы показали мне, как его также уплотнить; Я застрял на этом довольно долгое время!