gulp用于自动化和提高工作流,类似于grunt。gulp适用于nodejs平台。
gulp基础:
gulp两个主要的功能是读取想要处理的文件,把处理好的文件放到指定的地方
gulp.src()找出我们需要处理的文件
.pipe()用于处理这些被gulp.src()找出来的文件,他类似于管道,可以指定他的功能
.pipe(gulp.dest())将处理好的文件放到指定的地方,gulp.dest()的括号里面用于填写指定的位置
以上的几步合在一起就相当于一个复制的功能。将一个文件复制到另一个地方,源文件还是存在的。
gulp.src()找出我们需要处理的文件
.pipe()用于处理这些被gulp.src()找出来的文件,他类似于管道,可以指定他的功能
.pipe(gulp.dest())将处理好的文件放到指定的地方,gulp.dest()的括号里面用于填写指定的位置
以上的几步合在一起就相当于一个复制的功能。将一个文件复制到另一个地方,源文件还是存在的。
eg:
//创建一个对象,这样gulp就拥有'gulp'提供的全部的属性和方法了
var gulp = require('gulp');
//gulp.task()用来创建一个任务
//copy-index是方法名,执行这段的代码的时候直接在命令行输入gulp copy-index即可
gulp.task('copy-index',function(){
return gulp.src('index.html').pipe(gulp.dest('dist'));
});
var gulp = require('gulp');
//gulp.task()用来创建一个任务
//copy-index是方法名,执行这段的代码的时候直接在命令行输入gulp copy-index即可
gulp.task('copy-index',function(){
return gulp.src('index.html').pipe(gulp.dest('dist'));
});
gulp.task('images',function(){
//images/*.jpg代表的是读取images文件夹下的所有jpg的文件
//images/*.{png,jpg} images下面的png和jpg图片
//images/**/* images下面的所有子目录
return gulp.src('images/*.jpg').pipe(gulp.dest('dist/images'));
});
//images/*.jpg代表的是读取images文件夹下的所有jpg的文件
//images/*.{png,jpg} images下面的png和jpg图片
//images/**/* images下面的所有子目录
return gulp.src('images/*.jpg').pipe(gulp.dest('dist/images'));
});
gulp.task('data',function(){
//['xml/*.xml,'json/*.json'] 相当于用正则来匹配需要刷选的文件
return gulp.src(['xml/*.xml', 'json/*.json']).pipe(gulp.dest('dist/data'));
});
排除文件:在前面加一个!即可例如:
['xml/*.xml', 'json/*.json', '!json/secret-*.json']
//创建依赖,将原本的子任务全部集合到一个主任务上面来。方便管理
gulp.task('build', ['copy-index', 'images', 'data'],function(){
console.log('编译成功!');
});
['xml/*.xml', 'json/*.json', '!json/secret-*.json']
//创建依赖,将原本的子任务全部集合到一个主任务上面来。方便管理
gulp.task('build', ['copy-index', 'images', 'data'],function(){
console.log('编译成功!');
});
https://app.yinxiang.com/Home.action#n=f8e69469-2fb0-4c21-9c60-083c059a57f2&ses=4&sh=2&sds=5&
//监视文件,当文件改变的时候,就会重新执行一次gulp,让修改的文件同步到复制到的位置
1 gulp.task('watch', function(){ 2 gulp.watch('index.html', ['copy-index']); 3 gulp.watch('images/**/*.{jpg,png}', ['images']; 4 gulp.watch(['xml/*.xml', 'json/*.json', '!json/secret-*.json'], ['data']); 5 });
插件:
gulp提供很好的接口,但是他本身并不会做太多的事情,可以使用插件来扩展gulp的功能,编译less文件,合并,压缩等。
gulpjs.com/plugins/这个地址可以找到gulp可用的插件
gulpjs.com/plugins/这个地址可以找到gulp可用的插件
常用的插件:
gulp-sass插件:(编译)
gulp-less插件:(编译)
gulp-connect插件:(创建本地服务器)
实时预览
gulp-concat插件:(合并文件)
gulp-uglify插件:(最小化js文件)
gulp-rename插件:(重命名文件)
gulp-minify-css插件:(最小化css文件)
gulp-imagemin插件:(最小化图像)
gulp-rename插件:(重命名文件)
gulp-minify-css插件:(最小化css文件)
gulp-imagemin插件:(最小化图像)
gulp-less插件:
1 var less = require('gulp-less'); 2 gulp.task('less', function(){ 3 return gulp.src('stylesheets/**/*.less') 4 .pipe(less()) 5 .pipe(gulp.dest('dest/css')); 6 }); 7
gulp-connect插件:
1 var connect = require('gulp-connect'); 2 gulp.task('server', function(){ 3 connect.server({ 4 root:'dist' 5 }); 6 });
gulp-connect插件:实时刷新
1 var connect = require('gulp-connect'); 2 gulp.task('server', function(){ 3 connect.server({ 4 root:'dist', 5 livereload:true //开启实时刷新 6 }); 7 }); 8 var gulp = require('gulp'); 9 gulp.task('copy-index',function(){ 10 return gulp.src('index.html') 11 .pipe(gulp.dest('dist')) 12 .pipe(connect.reload()); //重新reload文件,不需要刷新,有点类似于angular的双向绑定 13 }); 14 gulp.task('default', ['server', 'watch']); //让其默认执行