Gulp学习--我的gulpfile.js代码(已解决大部分问题)

本文详细介绍了使用Gulp进行自动化构建的过程,包括压缩Sass、Less、CSS、JS、HTML和图片文件,以及初始化服务器和监听文件变化。通过Gulp插件实现文件压缩、源码映射生成、错误处理等功能,提高前端开发效率。
const { src,task,watch,dest,lastRun,series } = require('gulp');
const $ = require('gulp-load-plugins')();
const moment = require('moment');
const bs = require('browser-sync').create();

//压缩scss文件任务
async function listenSass(){
	await src('./src/**/*.scss',{since:lastRun(listenCss)})
		.pipe($.plumber({ //处理出错时进程终端
			errorHandler:function(error){
				this.emit('end');
			}
		}))
		.pipe($.sourcemaps.init())
		.pipe($.sass())
		.pipe($.cssnano({
			zindex:false
		}))
		.pipe($.rename({
			suffix:'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩less文件任务
async function listenLess(){
	await src('./src/less/*.less',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))
		.pipe($.sourcemaps.init())
		.pipe($.less())
		.pipe($.cssnano({
			zindex:false
		}))
		.pipe($.rename({
			suffix:'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩Css文件的任务
async function listenCss(){
	await src('./src/**/*.css',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))
		.pipe($.sourcemaps.init())
		.pipe($.cssnano({
			zindex:false
		}))
		.pipe($.rename({
			'suffix':'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩Zip文件的任务
async function listenZip(){
	var timestamp = moment().format("YYY-MM-DD_");
	await src('./src/**/*.zip',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))	
		.pipe($.sourcemaps.init())
		.pipe($.zip(timestamp+".zip"))
		.pipe($.rename({
			'suffix':'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩js文件任务
async function listenJs(){
	await src('./src/js/*.js',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))
		.pipe($.sourcemaps.init())
		.pipe($.babel({
             presets: ['@babel/env']
        }))
		.pipe($.uglify({
			parse: {
				html5_comments: true 	
    		},

    		compress: {
        		drop_console:false, 	
    		},
		    toplevel: false,	
		}))
		.pipe($.rename({
			suffix:'.min',
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩html文件任务
async function listenHtml(){
	await src('./src/html/*.html',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))
		.pipe($.sourcemaps.init())
		.pipe($.htmlmin({ 
			collapseWhitespace: true, 
			caseSensitive:false,
			removeTagWhitespace:false, 
		}))
		.pipe($.rename({
			suffix:'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//压缩图片文件的任务
async function listenImage(){
	await src('./src/**/*.{jpg,png,svg,gif}',{since:lastRun(listenCss)})
		.pipe($.plumber({ 
			errorHandler:function(error){
				this.emit('end');
			}
		}))		.pipe($.sourcemaps.init())
		.pipe($.cache($.imagemin([
			$.imagemin.gifsicle({
				interlaced: true, 
				optimizationLevel:1,
			}),

			$.imagemin.mozjpeg({
				quality: 75, 	
				progressive: true,
			}),

			$.imagemin.optipng({
				optimizationLevel: 5,
				interlaced: false,
				errorRecovery:true,
			}),

			$.imagemin.svgo({
				plugins: [
					{removeViewBox: false}, 
					{cleanupIDs: false} 
				]
			})
		])))
		.pipe($.rename({
			'suffix':'.min'
		}))
		.pipe($.sourcemaps.write())
		.pipe(dest('./dist/'))
		.pipe(bs.stream());
};

//初始化服务器
async function bsInit(){
	await bs.init({
		'server':{
			baseDir:'./'
		}
	});
};


//监听任务
function watchTaks(){
	watch('./src/css/*.css', series(listenCss));
	watch('./src/less/*.less', series(listenJs));
	watch('./src/scss/*.scss', series(listenSass));
	watch('./src/js/*.js', series(listenJs));
	watch('./src/html/*.html', series(listenHtml));
	watch('./src/image/*.{jpg,png,svg,gif}', series(listenImage));
};

exports.default = function(){
	bsInit();
	watchTaks();
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值