gulp是基于node实现Web前端自动化开发的工具,利用它能够极大的提高开发效率。 在Web前端开发工作中有很多’重复工作’,比如压缩CSS/JS文件。编写 gulp配置代码,让gulp自动执行这些’重复工作’。gulp主要是基于任务流(stream)的自动化构建工具
安装
npm install gulp -g- 使用
gulp -v查看安装好的全局gulp版本 npm init -y创建package.json文件- 新建
gulp配置文件gulpfile.js(固定写法) - 要运行
gulp任务,只要在命令行切换到当前目录执行gulp命令即可,默认会执行任务名为default的任务
gulp使用流程
首先通过gulp.src()方法获取到我们想要处理的文件流,然后把文件流通过pipe方法导入到gulp的插件中,最后把经过插件处理后的流再通过pipe方法导入到gulp.dest()中,gulp.dest()方法则把流中的内容写入到文件中, 文件流可以继续使用,执行后续操作
gulp的常用API
gulp.task()用来定义任务1
2
3
4
5
6
7
8/* 语法 gulp.task(name[, deps], fn)
name 为任务名
deps 是当前定义的任务需要依赖的其他任务,为一个数组。当前定义的任务会在所有依赖的任务执行完毕后才开始执行。如果没有依赖,则可省略这个参数
fn 为任务函数,我们把任务要执行的代码都写在里面。该参数也是可选的。
*/
gulp.task('mytask', ['array', 'of', 'task', 'names'], function() { //定义一个有依赖的任务
// Do something
});gulp.src()用来获取虚拟文件流的1
2
3
4
5
6
7
8/* gulp.src(globs[, options])
globs参数是文件匹配模式(类似正则表达式),用来匹配文件路径(包括文件名),当然这里也可以直接指定某个具体的文件路径。当有多个匹配模式时,该参数可以为一个数组。
options为可选参数。通常情况下我们不需要用到。
*/
//使用数组的方式来匹配多种文件
gulp.src(['js/*.js','!bob*.js','css/*.css','*.html'])
//匹配所有js文件,但排除掉以b开头的js文件
gulp.src([*.js,'!b*.js'])gulp.dest()方法是用来写文件的1
2
3
4
5
6
7
8
9
10/* gulp.dest(path[,options])
path为写入文件的路径 用来指定要生成的文件的目录,而不能指定生成文件的文件名 修改名称可以用gulp-rename
options为一个可选的参数对象,通常我们不需要用到
*/
var gulp = reruire('gulp');
gulp.src('script/jquery.js').pipe(gulp.dest('dist/foo.js'));
//最终生成的文件路径为 dist/foo.js/jquery.js,而不是dist/foo.js
//有通配符开始出现的那部分路径为 **/*.js
gulp.src('script/**/*.js').pipe(gulp.dest('dist')); //最后生成的文件路径为 dist/**/*.js
//如果 **/*.js 匹配到的文件为 jquery/jquery.js ,则生成的文件路径为 dist/jquery/jquery.jsgulp.watch()用来监视文件的变化,当文件发生变化后,可以用它来执行相应的任务,例如scss编译等1
2
3
4
5
6
7/* gulp.watch(glob[, opts], tasks)
glob 为要监视的文件匹配模式,规则和用法与gulp.src()方法中的glob相同。
opts 为一个可选的配置对象,通常不需要用到
tasks 为文件变化后要执行的任务,为一个数组
*/
gulp.task('sass',function(){})
gulp.watch('v2.0/src/sass/*.scss', ['sass'])
常用gulp插件
gulp-rename重命名npm install --save-dev gulp-renamegulp-uglifyjs文件压缩npm install --save-dev gulp-uglifygulp-minify-csscss文件压缩npm install --save-dev gulp-minify-cssgulp-minify-htmlhtml文件压缩npm install --save-dev gulp-minify-htmlgulp-concat文件合并npm install --save-dev gulp-concatgulp-lessless和sass的编译npm install --save-dev gulp-lessgulp-sassless和sass的编译npm install --save-dev gulp-sassgulp-imagemin图片压缩npm install --save-dev gulp-imagemingulp-zip将文件压缩成zipnpm install --save-dev gulp-zipgulp-sftp将文件上传至ftpnpm install --save-dev gulp-sftpbrowser-sync自动刷新npm install --save-dev browser-syncgulp-autoprefixer为css文件添加浏览器前缀npm install gulp-clean-css --save-devgulp-if条件判断及环境变量设置npm install gulp-if —save-devgulp-babelgulp中配置babel编译es6 需安装babel相关插件并配置.babelrc文件 还需要在项目中引入babel-polyfill编译es6新增apinpm install gulp-babel —save-devgulp-load-plugins自动加载插件npm install -D gulp-load-plugins1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/* 能自动帮你加载package.json文件里的gulp插件 无需将每一个插件都require进来 但前提是插件要以gulp-开头 已经安装过这些插件 */
/* package.json 中的gulp插件
"devDependencies": {
"gulp": "~3.6.0",
"gulp-rename": "~1.2.0",
"gulp-concat": "~0.4.3",
"gulp-load-plugins": "~0.5.1"
}
*/
var gulp = require('gulp');
//加载gulp-load-plugins插件,并马上运行它
var plugins = require('gulp-load-plugins')();
gulp.task('rename', function () {
gulp.src('js/jquery.js').pipe(plugins.rename()) //压缩
}添加
error事件监听1
2
3
4
5
6
7
8
9var babel = require("gulp-babel");
gulp.task("babel", function () {
return gulp.src(srcJs)
.pipe(babel())
.on('error',function(err){
console.log(err)
})
.pipe(gulp.dest(distJs))
})由于
Gulp 4并不向后兼容Gulp 3使用最新版时, 需要修改gulpfile.js
参考链接: Gulp 4 入门指南 相对完整的Gulp4升级指南 gulp最新文档
gulpfile.js代码
1 | var gulp = require('gulp'), |