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-rename
gulp-uglify
js文件压缩npm install --save-dev gulp-uglify
gulp-minify-css
css文件压缩npm install --save-dev gulp-minify-css
gulp-minify-html
html文件压缩npm install --save-dev gulp-minify-html
gulp-concat
文件合并npm install --save-dev gulp-concat
gulp-less
less和sass的编译npm install --save-dev gulp-less
gulp-sass
less和sass的编译npm install --save-dev gulp-sass
gulp-imagemin
图片压缩npm install --save-dev gulp-imagemin
gulp-zip
将文件压缩成zipnpm install --save-dev gulp-zip
gulp-sftp
将文件上传至ftpnpm install --save-dev gulp-sftp
browser-sync
自动刷新npm install --save-dev browser-sync
gulp-autoprefixer
为css文件添加浏览器前缀npm install gulp-clean-css --save-dev
gulp-if
条件判断及环境变量设置npm install gulp-if —save-dev
gulp-babel
gulp中配置babel编译es6 需安装babel相关插件并配置.babelrc文件 还需要在项目中引入babel-polyfill
编译es6新增apinpm install gulp-babel —save-dev
gulp-load-plugins
自动加载插件npm install -D gulp-load-plugins
1
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'), |