用Gulp搭建前端自动化解决方案(二)

上一篇我们知道怎么去搭建一个简单的gulp自动化流程,这一章,我们将介绍在项目中常用的gulp插件。

这是我自己构建的工作中用到的前端自动化解决方案,项目地址:github.com/garsonguo/gulpbase,里面包含了开发时用的版本和发布时用的版本,对你有帮助的话,可以点watch关注下哦。


先看下我的自动化解决方案,目录如下:


用Gulp搭建前端自动化解决方案(二)_第1张图片

首先,为了项目结构能够清晰,我们将各个任务放在了gulp/tasks/development目录中,因为

gulp需要从gukpfile.js启动,所以我们这里用到了第一个插件:

require-dir

用法如下:

varrequireDir=require('require-dir');

//引入tasks里面的所有的任务(包括子目录下的任务)

requireDir('./gulp/tasks',{recurse:true});

任务运行会默认去找default任务,所以这里我新建了一个default.js任务。

代码如下:

//默认任务

vargulp=require('gulp');

//开发版本

gulp.task('default',['webserver','less','js','images','watch']);

为了方便配置,我们这里新建了一个config.js的配置项。

部分代码如下,详细代码请看以上项目链接:

var src='./src';

var dest='./build';

module.exports= {

less:{

all:src+'/less/**/*.less',

src:src+'/less/*.less',

dest:dest+'/css',

rev:dest+'/rev/css',

settings:{//编译less过程需要的配置,可以为空

}},}

在开发版本中,从default.js中,我们可以看到,我们用到了几个任务,webserver,less,js以及images,watch这几个任务,我们就从左到右的顺序来介绍这几个任务所用到的插件。

webserver主要用到了LiveReload,很多童鞋可能会不知道LiveReload是什么鬼,其实蛮简单的,他就是个页面自动刷新的插件,当你更改代码后,会自动去刷新浏览器,不用你再去手动刷新浏览器看效果了。要用自动刷新,我们需构建个本地的服务器,所以这里我们共用到了两个插件,

gulp-livereload、gulp-webserver

用以下命令安装:

npm install gulp-livereload gulp-webserver --save-dev

用法如下:

var gulp=require('gulp');

var livereload=require('gulp-livereload');

var webserver=require('gulp-webserver');

gulp.task('webserver',function() {

gulp.src('./')

.pipe(webserver({

livereload:true,   //自动刷新浏览器

open:true    //自动打开浏览器

}))

})

当我们编写js代码时,常常需要对其进行错误验证,当发生错误是,我们并不希望中断gulp,所以接下来两个插件将派上用场。

gulp-notify、gulp-plumber

用法如下:

var gulp=require('gulp');

var notify=require('gulp-notify');//捕获错误,返回错误信息

var plumber=require('gulp-plumber');//避免因错误而中断gulp

var handleErrors=require('../util/handleErrors');

var config=require('../config').js;

//开发版本

gulp.task('js',function() {

return gulp.src(config.src)

.pipe(plumber())

.on('error',handleErrors)

.pipe(gulp.dest(config.dest))

})

在进行CSS开发时,为了增加效率,减少代码量,我们往往会使用less/sass来进行相应的开发。那么我们就需要专门的插件(gulp-less、gulp-sass)来使其编译为CSS代码。有时候,为了兼容性,我们还需要在css代码上增加相应的前缀,我们可以用gulp-autoprefixer插件。

gulp-less、gulp-autoprefixer

代码如下:

var gulp=require('gulp');

var less=require('gulp-less');

var plumber=require('gulp-plumber');//避免因错误而中断gulp

var notify=require('gulp-notify');//捕获错误,返回错误信息

var autoprefixer= require('gulp-autoprefixer');

var handleErrors=require('../util/handleErrors');

var config=require('../config').less;

//开发版本

gulp.task('less',function() {

return gulp.src(config.src)

.pipe(plumber())

.pipe(less(config.settings))

.pipe(autoprefixer('last 2 version','safari 5','ie 8','ie 9','opera 12.1','ios 6','android 4'))

.on('error',handleErrors)

.pipe(gulp.dest(config.dest));

})

很多时候,UI给的图片很大,为了使其大小小一点,我们需要压缩,因此我们这里会用到(gulp-imagemin)来对图片进行压缩,压缩过的图片我们往往不需要再进行压缩了,所以我们可以用(gulp-cache)来进行缓存,对比图片是否有压缩过等。

gulp-imagemin、gulp-cache、imagemin-pngquant

用法如下:

var gulp=require('gulp');

var imagemin=require('gulp-imagemin');

var notify=require('gulp-notify');//捕获错误,返回错误信息

var plumber=require('gulp-plumber');//避免因错误而中断gulp

var cache=require('gulp-cache');

var pngquant= require('imagemin-pngquant');

var handleErrors=require('../util/handleErrors');

var config=require('../config').images;

gulp.task('images',function() {

return gulp.src(config.src)

.pipe(plumber())

.pipe(cache(imagemin({//只压缩修改的图片,没有修改的图片直接从缓存文件读取

progressive:true,//无损压缩

use:[pngquant()]//使用 pngquant 深度压缩 png 图片

})))

.on('error',handleErrors)

.pipe(gulp.dest(config.dest));

})

当启动gulp时,我们往往需要对任务的文件夹进行监督,看哪些文件有变动,从而及时的将改变更新到目标文件中,这里我们就用到了(gulp-watch)。

gulp-watch

用法如下:

var gulp=require('gulp');

var watch=require('gulp-watch');

var config=require('../config');

gulp.task('watch',function() {

//监听less文件源,有改变,运行less

watch(config.less.all,function() {

gulp.start('less')

});

watch(config.js.src,function() {

gulp.start('js')

})

watch(config.images.src,function() {

gulp.start('images')

})

})

开发的解决方案所用到的插件就介绍到这里,有什么不正确或者错误的地方,望网友可以指正。


你可能感兴趣的:(用Gulp搭建前端自动化解决方案(二))