gulp实用教程(三)常用插件
2015-11-23 15:11:20

116
gulp插件
gulp提供了一些很实用的接口,但本身并不能做太多的事情。 可以读取文件、写入文件以及监控文件等一少部分功能。 其它实用的功能都是依靠插件来进行扩展的。 这些插件可以实现比如
- 编译 Sass:gulp-sass
- 编译 Less:gulp-less
- 合并文件:gulp-concat
- 压缩js 文件:gulp-uglify
- 重命名js文件:gulp-rename
- 优化图像大小:gulp-imagemin
- 压缩css 文件:gulp-minify-css
- 创建本地服务器:gulp-connect
- 实时预览 gulp-connect
插件列表
使用插件
- npm install xxx --save-dev 安装插件
- 在 gulpfile.js 顶部引入此插件
- 在创建任务的时候使用此插件
gulp-load-plugins这个插件能自动帮你加载package.json文件里的gulp插件。 例如假设你的package.json文件里的依赖是这样的:
"devDependencies": { "gulp": "^3.9.0", "gulp-concat": "^2.6.0", "gulp-connect": "^2.2.0", "gulp-imagemin": "^2.3.0", }
然后我们可以在gulpfile.js中使用gulp-load-plugins来帮我们加载插件:
var gulp = require('gulp'); //加载gulp-load-plugins插件,并马上运行它 var $ = require('gulp-load-plugins')();
然后我们要使用gulp-rename和gulp-ruby-sass这两个插件的时候, 就可以使用$.concat和$.connect来代替了,也就是原始插件名去掉gulp-前缀,之后再转换为驼峰命名。
安装插件
npm install gulp-sass --save-dev
安装后可以在node-modules里看到此插件 也可以在package.json的devDependencies里面看到此插件的配置 "gulp-sass": "^2.0.4"
插件任务
可以在app/sass下面创建文件base.scss,然后就可以把此文件编译到dist下面
使用插件
想要使用 Gulp 去把 Sass 编译成 CSS ,我们可以使用 gulp sass 这个插件。 先在我们的项目里去安装一下这个插件,打开命令行工具,进入到项目所在的目录。 然后输入 npm install gulp-sass. 可以把这个 gulp-sass 放到项目的开发依赖里面,加上一个 --save-dev ..
sudo npm install gulp-sass --save-dev
完成以后,回到项目的node_modules 这里,你会看到刚才安装的 gulp-sass 插件 另外,在项目的 package.json 这个文件里面, devDependencies 这里,也会有这个 "gulp-sass": "^2.0.4"
在项目里面,app/sass 这个目录的下面,有一个 sass 文件,就是这个 base.scss 下面,我们可以使用 gulp-sass 这个插件,把这个目录里面的 sass 文件编译成 css , 再放到 dist 目录下面的 css 这个目录的下面。
打开 gulpfile.js 在这个文件里面,我们首先要把 gulp-sass 这个插件包含进来 var sass = require('gulp-sass') 这样我们就可以使用 sass 这个方法去处理文件了 ...
在下面,再去创建一个任务gulp.task 这个任务可以叫它 sass 再用一个匿名函数 return gulp.src 先去指定要处理的文件 这里就是 app/sass 这个目录里面的所有的 scss 类型的文件 注意这里我用了一个 **/ 它会包含目录下面的所有级别的子目录
接着用一个 pipe 在这个管道里,我们可以使用 sass 插件去处理读取进来的文件 这里输入 sass() 这个名字是我们在上面包含 gulp-sass 这个插件的时候起的 如果你用的是其它的名字,在这里,你也需要修改成对应的名字
再用一个 pipe ,我们去输出处理好的文件 也就是编译好的 sass 这里使用 gulp 的 dest 方法 在这个方法里指定一下存储这些处理好的文件的路径 放到 dist 目录下面的 css 这个目录里面。
执行
保存 打开命令行工具 去执行一下这个任务 输入 gulp sass 回车 完成以后再回到项目 打开 dist 下面的 css 这个目录 在这里,你会看到编译好的 sass,就是这个 style.css
代码如下
var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass',function(){ return gulp.src('app/sass/*.scss').pipe(sass()).pipe(gulp.dest('dist/css')); }); gulp.task('default',['sass']);
安装插件
npm install gulp-less --save-dev
安装后可以在node-modules里看到此插件 也可以在package.json的devDependencies里面看到此插件的配置
创建less
可以在app/less下面创建文件page.less,然后就可以把此文件编译到dist下面
编写任务
再打开 gulpfile.js 先把 gulp-less 这个插件包含进来 把 Less 编译成 CSS 跟把 Sass 编译成 css 这个任务是差不多的,只不过我们需要使用不同的插件 先改一下任务的名字,sass 换成 less 要读取进来的文件是 app/less 目录下面的所有的 less 文件*.scss 改成 *.less 然后用 gulp-less 这个插件去处理这些文件 sass 换成 less 保存 回到命令行 执行一下 less 这个任务 输入 gulp less 成功以后,回到项目 打开 dist/css 这个目录 在这里你可以找到编译好的 less page.css
代码如下
var gulp = require('gulp'); var less = require('gulp-less'); gulp.task('less',function(){ return gulp.src('app/less/*.less').pipe(less()).pipe(gulp.dest('dist/css')); }); gulp.task('default',['less']);
gulp-connect
有些时候我们需要把文件放到本地服务器上去预览,gulp-connect可以帮我们创建一个本地服务器去运行我们的项目
安装插件
npm install gulp-connect --save-dev
加上一个 --save-dev,把这个插件放到开发依赖里面。
创建任务
打开 gulpfile.js 先在文件的顶部这里 去包含一下这个 gulp-connect 插件 给它起个名字connect ... var connect = require('gulp-connect');
运行任务
下面,我们可以去创建一个本地服务器,去运行项目的 dist 目录下面的静态文件 先创建一个任务 用 gulp 的 task 这个任务叫它 server 再用一个匿名函数 在这个函数里面 可以使用 connect 的 server 这个方法去创建这个服务器
gulp.task('server', function () { connect.server(); });
在这个方法里面,可以去做一些设置,比如服务器的主机名,端口号,服务器的根目录等等 给它一个对象,然后设置一下 root 这个选项 ,它的值就是服务器的根目录,这里我们设置成 dist 这个目录 connect.server({root: 'dist'});
观察结果
保存 打开命令行工具 去执行一下这个任务 输入 gulp server 这里会提示 Server started http://localhost:8080 这个 localhost:8080 就是服务器的地址 默认的端口号是 8080 ,你也可以通过 port 这个选项自己去指定这个端口号 下面可以打开一个浏览器 输入 localhost:8080 回车 这里显示的就是服务器根目录下面的 dist 目录下面的静态文件
代码如下
var gulp = require('gulp'); var less = require('gulp-less'); var connect = require('gulp-connect'); gulp.task('server',function(){ connect.server({ root:'dist',//服务器的根目录 port:8080 //服务器的地址,没有此配置项默认也是 8080 }); }); //运行此任务的时候会在8080上启动服务器, gulp.task('default',['server']);
gulp-connect
我们希望当文件变化的时候浏览器可以自动刷新,这样我们就不需要文件修改后手动去刷新浏览器了
配置
启用实时刷新
在server配置中增加livereload启用实时刷新的功能
connect.server({root: 'dist', livereload: true});
配置哪些文件变化时去自动刷新浏览器
.pipe(connect.reload());
比如我们想让浏览器在 index.html 这个文件发生变化以后,去刷新一下 在这个 copy-index 任务里面,把文件复制到目的地以后,再执行一下刷新 后面加上一个 .pipe 管道 .. 这个管道干的事就是去刷新浏览器 ... 可以使用 connect 的 reload 这个方法
gulp.task('copy-html',function(){ gulp.src('app/index.html') .pipe(gulp.dest('dist')) .pipe(connect.reload()); });
因为在下面的 watch 这个任务里面,我们已经监视了 index.html 这个文件的变化, 一旦发生变化,就去执行 copy-index 这个任务, 这个任务现在要做的事就是去把 index.html 复制到 dist 这个目录的下面,然后再刷新一下浏览器 .
最后我们可以再去创建一个默认的任务 输入 gulp.task 任务的名字是 default 这个任务依赖 server 还有 watch 这两个任务
gulp.task('default', ['server', 'watch']);
运行任务
保存 打开命令行工具 先停止一下服务器 ctrl + C 然后再执行 gulp 这样会起动服务器,并且开始监视文件的变化 ..
观察结果
打开浏览器,刷新一下 再回到项目 打开根目录下面的 index.html 这里我们可以修改一下这个文件 然后保存一下 你会发现,在浏览器上,会实时的显示出文件的变化
代码如下
var gulp = require('gulp'); var connect = require('gulp-connect'); gulp.task('copy-html',function(){ gulp.src('app/index.html') .pipe(gulp.dest('dist')) .pipe(connect.reload()); }); gulp.task('watch',function(){ gulp.watch('app/index.html',['copy-html']); }); gulp.task('server',function(){ connect.server({ root:'dist',//服务器的根目录 port:8080, //服务器的地址,没有此配置项默认也是 8080 livereload:true//启用实时刷新的功能 }); }); //运行此任务的时候会在8080上启动服务器, gulp.task('default',['server','watch']);
gulp-concat
可以把几个文件合并到一块
安装
npm install gulp-concat --save-dev
配置
再回到我们的项目 app/css下有index.css, js下有 index.js page.js inex.tmp.js
我们可以使用 gulp-concat 这个插件,把index.js和page.js这两个js文件合并到一块儿,
然后放到 dist 目录下面的 js 这个目录的里面。
打开 gulpfile.js
先在文件的顶部,把 gulp-concat 这个插件包含进来
var concat = require('gulp-concat');
然后再创建一个任务
用 gulp 的 task 方法
任务的名字可以叫它 copy-other
再用一个匿名函数去设计一下这个任务要干的事儿
先用 gulp 的 src 方法,去读取要处理的文件
这里我们找出 js 目录下面的两个 js 文件
先给这个方法一个数组
然后提定一下app/js下面的文件的位置 逗号分隔一下
再排除掉 tmp.js结尾的文件 再用一个 .pipe 管道
在这个管道里面,可以使用 concat 去把读取过来的文件合并到一块儿
在这个 concat 里面,可以指定一下合并以后,这个文件的名字
我们叫它all.js
接着再用一个 .pipe 去把合并好的文件放到一个指定的位置上
用 gulp 的 dest 放在 dist 目录下面的 js 这个目录里面。
gulp.task('concat',function(){ return gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(gulp.dest('dist/js')); });
运行任务
保存
找到命令行工具
去执行一下这个任务
输入 gulp scripts
完成以后,再回到项目
打开 dist
js 这个目录,这个目录下面的 all.js 就是合并好的文件
代码如下
var gulp = require('gulp'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify') gulp.task('uglify',function(){ return gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(uglify()) .pipe(gulp.dest('dist/js')); }); gulp.task('default',['uglify']);
gulp-concat
合并后我们可以对JS文件进行合并,最小化处理 完成这个任务可以使用 gulp-uglify
安装
先打开命令行工具
npm install gulp-uglify --save-dev
配置
完成以后回到项目 先在文件的顶部去包含这个插件 起个名字叫做 uglify
var uglify = require('gulp-uglify');
面我们用这个插件提供的功能去压缩一下合并之后的这个 js 文件 这里我们可以直接在这个 uglify 任务里面,在concat 之后,加上一个 .pipe 管道 在这个管道里面,使用 uglify 去压缩一下传过来的文件
gulp.task('uglify',function(){ return gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(uglify()) .pipe(gulp.dest('dist/js')); });
运行任务
保存 回到命令行工具 去执行一下这个 uglify 任务 输入 gulp uglify 完成以后,再回到项目 打开 dist/js/all.js 你会发现这个文件就是经过最小化处理之后的 js 文件
代码如下
var gulp = require('gulp'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify') gulp.task('uglify',function(){ return gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(uglify()) .pipe(gulp.dest('dist/js')); }); gulp.task('default',['uglify']);
html文件压缩
gulp-minify-html插件用来压缩html文件。
代码如下
var gulp = require('gulp'), minifyHtml = require("gulp-minify-html"); gulp.task('minify-html', function () { gulp.src('src/*.html') // 要压缩的html文件 .pipe(minifyHtml()) //压缩 .pipe(gulp.dest('dist/html')); });
gulp-concat
在把处理好的文件存放到指定的位置之前,我们可以先去重新命名一下它。可以使用 gulp-rename 这个插件.
安装
npm install gulp-rename --save-dev
配置
然后回到项目,打开 gulpfile.js,在文件的顶部,去包含一下这个插件,可以叫它 rename. var rename = require('gulp-rename');
在这个 uglify 任务里面,我们先把 js 文件使用 concat 插件合并到了一块, 又用 uglify 压缩了一下,最后再输出到 dist 下面的 js 这个目录里面。
这里我们可以让 uglify 这个任务,在合并文件以后,输出合并之后的文件, 然后再压缩一下,再用 gulp-rename 插件去重命名一下压缩以后的文件, 再把压缩之后的文件输出到 dist 下面的 js 目录里面。
gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(gulp.dest('dist/js')) .pipe(uglify()) .pipe(rename('app.min.js')) .pipe(gulp.dest('dist/js'));
运行任务
保存 回到命令行工具 再去执行一下 uglify 这个任务 输入 gulp uglify 完成以后,回到项目 打开 dist/js 你会发现这个目录的下面有两个 js 文件 all.js 是合并以后的 js 文件 all.min.js 是合并,压缩,然后重命名的 js 文件。
代码如下
var gulp = require('gulp'); var concat = require('gulp-concat'); var uglify = require('gulp-uglify'); var rename = require('gulp-rename'); gulp.task('uglify',function(){ return gulp.src(['app/js/*.js','!app/js/*.tmp.js']) .pipe(concat('app.js')) .pipe(gulp.dest('dist/js')) .pipe(uglify()) .pipe(rename('app.min.js')) .pipe(gulp.dest('dist/js')); }); gulp.task('default',['uglify']);
ggulp-imagemin
如果要想在保证不改变图像质量的情况下,让图像文件的体积变得更小一点,我们可以使用 gulp-imagemin
安装
sudo npm install gulp-imagemin --save-dev
配置
完成以后,回到项目
打开 gulpfile.js
先在文件顶部去包含这个插件,可以叫它 imagemin
var imagemin = require('gulp-imagemin');
之前我们创建过一个叫 copy-imgs 的任务
在这个任务里面,我们可以使用这个插件去优化一下图像的尺寸
添加一个 .pipe,在这个管道里边,使用 imagamin()
gulp.task('copy-imgs',function(){ return gulp.src('app/imgs/**/*.{jpg,png}') .pipe(imagemin()) .pipe(gulp.dest('dist')); });
这个插件还有很多配置的选项,你可以参考项目的页面 gulp-imagemin
这里我们先用插件默认的选项
保存
再去执行一下这个任务
打开命令行
输入
gulp copy-images
回车
这里会显示出
imagemin 优化的图像的数量
还有节省的空间跟比例是多少
imagemin 给我的项目优化了 6 个图像文件,节省了 169KB 的空间
节省的空间占所有图像文件尺寸的 11.3%
代码如下
var gulp = require('gulp'); var rename = require('gulp-rename'); var imagemin = require('gulp-imagemin'); gulp.task('copy-images',function(){ return gulp.src('app/imgs/**/*.{jpg,png}') .pipe(imagemin()) .pipe(gulp.dest('dist')); }); gulp.task('default',['copy-images']);
使用gulp-jshint插件,用来检查js代码。
var gulp = require('gulp'), jshint = require("gulp-jshint"); gulp.task('jsLint', function () { gulp.src('src/*.js') .pipe(jshint()) .pipe(jshint.reporter()); // 输出检查结果 });
代码如下
学习建议
- 多了解插件库,利用最合适的插件。
- 常用的插件,仔细阅读 文档以便正好使用。
- 学习好自身的API
- 尝试编写适合自己工作流程中和习惯的plugin