gulp是一个自动化工具,帮助开发过程中自动执行构建。
gulp使用基础知识点,共四个:基于流实现
从gulp3到gulp4:参考:https://segmentfault.com/a/1190000017571288?utm_source=tag-newest
gulp.series 用于串行(顺序)执行
gulp.parallel 用于并行执行
gulp.task('default',
gulp.series('clean', gulp.parallel('scripts', 'styles'),
function() {...}));
gulp在使用过程中相关的模块:
node-glob
npm i glob
var glob = require("glob")
// options is optional
glob("**/*.js", options, function (er, files) {
// files is an array of filenames.
// If the `nonull` option is set, and nothing
// was found, then files is ["**/*.js"]
// er is an error object or null.
})
vinyl 美: ['vaɪn(ə)l]
Vinyl是一个描述文件的非常简单的元数据对象。 当您想到一个文件时,会想到两个属性:路径和内容。 这些是Vinyl对象的主要属性。 文件不一定代表计算机文件系统上的某些内容。 您有S3,FTP,Dropbox,Box,CloudThingly.io和其他服务上的文件。 Vinyl可用于描述来自所有这些来源的文件
vinyl-fs
gulp-rename 改变gulp.dest()输出的文件名称
gulp-load-plugins这个插件会自动帮你加载package.json文件里的gulp插件
gulp.task('default',function(){//js文件合并
gulp.src('app/sass/!*.sass').pipe($.sass()).pipe(gulp.dest('dist/css'));
})
gulp.task('default',function(){//js文件合并
gulp.src('app/less/!*.less').pipe($.less()).pipe(gulp.dest('dist/css'));
})
gulp.task('default',function(){
gulp.src('app/!*.js').pipe($.concat('all.js')).pipe(gulp.dest('dist'));
})
gulp.task('default',function(){
gulp.src(['app/js/*.js']).pipe($.uglify()).pipe(gulp.dest('dist/js'))录下
})
gulp.task('default',function(){
gulp.src(['app/js/*.js']).pipe($.rename('app.min.js')).pipe(gulp.dest('dist/js'))
})
gulp.task('default',function(){
gulp.src('app/images/*.{jpg,png,JPG,PNG}').pipe($.imagemin()).pipe(gulp.dest('dist/images'))
})
gulp.task('default',function(){
gulp.src'app/css/*.css').pipe($.minifyCss()).pipe(gulp.dest('dist/css'))
})
gulp.task('server',function(){
$.connect.server({
root:'dist',//服务器的根目录
port:8080, //服务器的地址,没有此配置项默认也是 8080
livereload:true//启用实时刷新的功能
});
});
gulp.task('copy-html',function(){
gulp.src('app/index.html')//指定源文件
.pipe(gulp.dest('dist'))//拷贝到dist目录
.pipe($.connect.reload());//通知浏览器重启
});
代码检查 jshint
gulp.task('jsLint', function () {
gulp.src('app/!*.js')
.pipe(jshint()) //进行代码检查
.pipe(jshint.reporter()); // 输出检查结果
});
run-sequence 按指定的顺序运行gulp任务序列
gaze fs watch封装模块
实例1:
说明:gulp.task中的回调函数的三种情况
第一:在异步操作完成后执行一个回调函数来通知gulp这个异步任务已经完成,这个回调函数就是任务函数的第一个参数。
gulp.task('one',function(cb){ //cb为任务函数提供的回调,用来通知任务已经完成
//one是一个异步执行的任务
setTimeout(function(){
console.log('one is done');
cb(); //执行回调,表示这个异步任务已经完成,只是起一个通知的作用,并不是指向task two 的 fun
},5000);
});
//这时two任务会在one任务中的异步操作完成后再执行
gulp.task('two',['one'],function(){
console.log('two is done');
});
//one is done
//two is done
第二:定义任务时返回一个流对象。适用于任务就是操作gulp.src获取到的流的情况。
gulp.task('one',function(cb){
var stream = gulp.src('client/**/*.js')
.pipe(dosomething()) //dosomething()中有某些异步操作
.pipe(gulp.dest('build'));
return stream;
});
gulp.task('two',['one'],function(){
console.log('two is done');
});
第三:返回一个promise对象,例如
var Q = require('q'); //一个著名的异步处理的库 https://github.com/kriskowal/q
gulp.task('one',function(cb){
var deferred = Q.defer();
// 做一些异步操作
setTimeout(function() {
deferred.resolve();
}, 5000);
return deferred.promise;
});
gulp.task('two',['one'],function(){
console.log('two is done');
});
实例2:
参考:https://www.gulpjs.com.cn/docs/api/
https://blog.csdn.net/hsl0530hsl/article/details/78366377