@Gutnov

Почему gulp-watch не видит изменения в папке с картинками?

const gulp             = require('gulp'),
	sass             = require('gulp-sass'),
	browserSync      = require('browser-sync'),
	concat           = require('gulp-concat'),
	uglify           = require('gulp-uglify'),
	imagemin         = require('gulp-imagemin'),
	imageminZopfli   = require('imagemin-zopfli'),
	imageminJpegRecompress = require('imagemin-jpeg-recompress'),
	cache            = require('gulp-cache'),
	autoprefixer     = require('gulp-autoprefixer'),
	babel            = require('gulp-babel'),
	plumber          = require('gulp-plumber'),
	twig             = require('gulp-twig'),
	cheerio          = require('gulp-cheerio'),
	path             = require('path'),
	htmlbeautify     = require('gulp-html-beautify'),
	gulpif           = require('gulp-if'),
	del              = require('del'),
	svgmin           = require('gulp-svgmin'),
	svgSymbols       = require('gulp-svg-symbols'),
	gcmq             = require('gulp-group-css-media-queries');

// таск для компиляции scss в css
gulp.task('sass', () => {
	return gulp.src('src/assets/scss/style.scss')
	.pipe(sass({includePaths: ['src/']}).on('error', sass.logError))
	.pipe(autoprefixer(['last 15 versions', '> 1%', 'ie 8'], {cascade: true}))
	.pipe(gcmq())
	.pipe(gulp.dest('pages'))
	.pipe(browserSync.reload({stream: true}))
});

// файлы для сборки
var jsFiles = ['src/assets/js/*.js', 'src/**/*.js'];

// таск для объединения js файлов
gulp.task('scripts', () => {
	process.env.NODE_ENV = "release";
	return gulp.src(jsFiles)
		.pipe(babel())
		.pipe(concat('main.min.js'))
		// .pipe(uglify()) // Сжимаем JS файл
		.pipe(gulp.dest('pages'))
		.pipe(browserSync.reload({stream: true}))
});

// таск для сборки, транспалирования и сжатия скриптов
gulp.task('scripts-build', () => {
	process.env.NODE_ENV = "release";
	return gulp.src(jsFiles)
		.pipe(babel())
		.pipe(concat('main.min.js'))
		.pipe(uglify())
		.pipe(gulp.dest('pages'));
});

// приводим впорядок скомпилированный код после pug-a
gulp.task('htmlbeautify', () => {
	var options = {
		indentSize: 4,
		unformatted: [
			 'abbr', 'area', 'b', 'bdi', 'bdo', 'br', 'cite',
			'code', 'data', 'datalist', 'del', 'dfn', 'em', 'embed', 'i', 'ins', 'kbd', 'keygen', 'map', 'mark', 'math', 'meter', 'noscript',
			'object', 'output', 'progress', 'q', 'ruby', 's', 'samp', 'small',
			 'strong', 'sub', 'sup', 'template', 'time', 'u', 'var', 'wbr', 'text',
			'acronym', 'address', 'big', 'dt', 'ins', 'strike', 'tt', 'a'
		],
		"indent_char": " ",
		"indent_level": 1,
		"indent_with_tabs": false,
	};
	gulp.src('./*.html')
		.pipe(htmlbeautify(options))
		.pipe(gulp.dest('./'));
});

gulp.task('twig', function () {
	return gulp.src(['./src/*.twig'])
	.pipe(plumber())
	.pipe(twig({base:'./src/'}))
	.pipe(htmlbeautify())
	.pipe(gulp.dest("pages/",))
	.pipe(browserSync.reload({stream: true}))
});

// таск для обновления страницы
gulp.task('browser-sync', () => {
	browserSync({
		server: {baseDir: './'},
		startPath: './pages/index.html',
		serveStaticOptions: {extensions: ["html"] },
		ghostMode: {scroll: false },
		notify: false,
	})
});

// таск следит за изменениями файлов и вызывает другие таски


// таск сжимает картинки
gulp.task('img', function() {
	return gulp.src(['src/assets/img/*.png', 'src/assets/img/*.jpg']) // откуда брать картинки
	.pipe(imagemin([
		imageminJpegRecompress({
			loops: 4,
			min: 60,
			max: 80,
			quality: 'high'
		}),
		imagemin.gifsicle(),
		imagemin.optipng(),
		imagemin.svgo()
	]))
	.pipe(gulp.dest('pages/img/'))
	.pipe(browserSync.reload({stream: true}))
});

gulp.task('svg-min', () => {
	return gulp.src('src/assets/svg/*.svg')
	.pipe(
		svgmin(file => {
			const { relative } = file
			const prefix = path.basename(relative, path.extname(relative))
			return {
				js2svg: {pretty: true, },
				plugins: [
					{cleanupIDs: { prefix: '${prefix}-' + Math.floor(Math.random() * (100 - 10)) + 10 }, },
					{removeDoctype: true, },
					{removeXMLProcInst: true, },
					{removeViewBox: false },
					{removeTitle: true, },
					{removeDesc: { removeAny: true }, },
					{convertTransform: {}, },
				],
			}
		})
	)
	.pipe(
		cheerio({
			run: ($, file) => {
				const $clipPath = $('clipPath')
				const $mask = $('mask')
				let $defs = $('defs')
				const hasClipPath = $clipPath.length > 0
				const hasMask = $mask.length > 0
				const hasDefs = $defs.length > 0

				$('[fill]').removeAttr('fill');
				$('[stroke]').removeAttr('stroke');
				$('[style]').removeAttr('style');

				if (!hasClipPath && !hasMask) return

				if (!hasDefs) {
					$defs = $('<defs></defs>')
					$defs.prependTo('svg')
				}

				function copyToDefs(i, el) {
					const $el = $(el)
					const $clone = $el.clone()
					$clone.appendTo($defs)
					$el.remove()
				}

				if (hasClipPath) $clipPath.each(copyToDefs)
					if (hasMask) $mask.each(copyToDefs)
			},
			parserOptions: {
				xmlMode: true,
			},
		})
	)
	.pipe(gulp.dest('pages/svg'))
	.on('end', () => {del('src/assets/svg/*.svg', {force:true})})
})

gulp.task('svg-sprite', function() {
	return gulp.src('pages/svg/*.svg')
		.pipe(
			svgSymbols(
				{
					svgAttrs: { class: 'svg-symbol', fill: 'none'},
					templates: ['default-svg', 'default-demo', 'default-scss']
				}
			)
		)
		.pipe(gulpif(/[.]svg$/, gulp.dest('src/assets')))
		.pipe(gulpif(/[.]html$/, gulp.dest('pages')))
		.pipe(gulpif(/[.]scss$/, gulp.dest('src/assets/scss')))
})

gulp.task('watch', function()
{
	gulp.watch(['scss/**/*.scss','src/**/*.scss'], gulp.parallel('sass'));
	gulp.watch('src/**/*.twig', gulp.parallel('twig'));
	gulp.watch(['src/**/*.js'], gulp.parallel('scripts'));
	gulp.watch('src/**/*.js', gulp.parallel(() => { browserSync.reload(); }));
	gulp.watch(['src/assets/svg/*'], {events: ['all']}, gulp.series('svg-min', 'svg-sprite'));
	gulp.watch(['src/assets/img/*.{png,jpg,svg,webp}'], {events: ['all']}, gulp.parallel('img'));
});

// сборка проекта
gulp.task('build', gulp.series('svg-min', 'sass', 'twig', 'scripts-build', 'img', async () => { console.log('builded');}))

// основной таск, который запускает вспомогательные
gulp.task('default', gulp.parallel('watch', 'browser-sync', 'sass', 'twig', 'img', 'svg-min', 'svg-sprite', 'scripts', () => { console.log('dev start');}));


Только на папке img не срабатывает. С остальными файлами работает как надо.
  • Вопрос задан
  • 144 просмотра
Пригласить эксперта
Ответы на вопрос 1
Я впервые вижу такой паттерн, через фигурные скобки.
Они используют glob под капотом, и там я такого паттерна тоже не нашел: https://www.npmjs.com/package/glob

Проверьте что паттерн на изображения составлен верно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы