#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:
-
Все ваши функции от
watch_AllDesktop
доwatch_AllMobile
нуждаются в закрывающей скобке}
-
Ваша основная проблема в том, что вы не экспортируете свою задачу
Задачи стажера экспортировать не требуется, но все ваши задачи, которые должны выполняться на консоли, должны иметь экспорт.
Поместите, например, следующий экспорт в конце 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. Это сработало отлично 🙂 Спасибо за исправление и за то, что вы показали мне, как его также уплотнить; Я застрял на этом довольно долгое время!