Gulp实战(二)
一.配置环境
1.基于NodeJs安装Git,npm,gulp
2.安装各类插件
3.参考文档
- http://www.tuicool.com/articles/UbaqyyJ
- http://www.tuicool.com/articles/QzaqAbF
- http://www.gulpjs.com.cn/docs/api/
- https://segmentfault.com/a/1190000002932998
二.测试项目结构

三.配置文件代码
var gulp = require('gulp'),
del = require('del'), //删除文件/文件夹
gulpif = require('gulp-if'),
gulpSequence = require('gulp-sequence'), //gulp顺序执行任务插件
imagemin = require('gulp-imagemin'), //压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
cache = require('gulp-cache'), //gulp的缓存代理
concat = require('gulp-concat'); //多个文件合并成一个
var nano = require('gulp-cssnano'), ////删除空白和注释,并且压缩代码
postcss = require("gulp-postcss"), //css预编译器
sprites = require('postcss-sprites').default, //CSS精灵
autoprefixer = require('autoprefixer'), //自动补全浏览器兼容性前缀
cssgrace = require('cssgrace'); //CSS后处理工具,hackIE
var uglify = require('gulp-uglify'); //通过UglifyJS来压缩JS文件
var rev = require('gulp-rev'), //对文件名加MD5后缀
revCollector = require('gulp-rev-collector'); //这个插件就是从manifests中获取静态资源版本数据, 该数据由不同的流产生, 并且替换html中的链接.
var minifyHtml = require('gulp-minify-html'); //压缩HTML文件
var usemin = require('gulp-usemin'), //用来将HTML 文件中(或者templates/views)中没有优化的script 和stylesheets 替换为优化过的版本
livereload = require('gulp-livereload'),
notify = require('gulp-notify');
var SRC_DIR = './src/';
var DST_DIR = './dist/';
var condition = true;
gulp.task('clean', function() {
return del(['dist']);
});
/**
* 压缩图片
*/
gulp.task('min-img', function() {
gulp.src(SRC_DIR + '/img/*.{png,jpg,gif,ico}')
.pipe(cache(imagemin({ //从缓存中读取,OK,只针对修改后的图片
optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true, //类型:Boolean 默认:false 多次优化svg直到完全优化
svgoPlugins: [{ removeViewBox: false }], //不要移除svg的viewbox属性
progressive: true
})))
.pipe(gulp.dest(DST_DIR + '/img')); //输出目录
});
/**
* 压缩CSS
*/
gulp.task("min-css-pc", function() {
// PostCSS
var processors = [
sprites({
'stylesheetPath': SRC_DIR + '/css/',
'spritePath': DST_DIR + '/img/'
}),
autoprefixer({
browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
}),
cssgrace
];
return gulp.src([SRC_DIR + '/css/**/*.css'])
.pipe(nano({
discardComments: {
removeAll: true
}
}))
.pipe(postcss(processors))
.pipe(gulp.dest(DST_DIR + '/css/'));
});
/**
* 压缩JS
*/
gulp.task('min-js', function() {
return gulp.src(SRC_DIR + '/js/**/*.js')
.pipe(uglify())
.pipe(gulp.dest(DST_DIR + '/js/'));
});
/*
* 压缩并版本化JS
*/
gulp.task('rev-min-js', function() {
return gulp.src(SRC_DIR + '/js/**/*')
.pipe(concat('all.min.js'))
.pipe(uglify())
.pipe(rev())
.pipe(gulp.dest(DST_DIR + '/js/'))
.pipe(rev.manifest())
.pipe(gulp.dest(DST_DIR + '/rev/js'));
});
/**
* 压缩版本化CSS
*/
gulp.task("rev-min-css", function() {
// PostCSS
var processors = [
sprites({
'stylesheetPath': SRC_DIR + '/css/',
'spritePath': DST_DIR + '/img/'
}),
autoprefixer({
browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
}),
cssgrace
];
return gulp.src([SRC_DIR + '/css/**/*.css'])
.pipe(concat('all.min.css')) //合并后的文件
.pipe(nano({
discardComments: {
removeAll: true
}
}))
.pipe(rev()) //版本化
.pipe(postcss(processors)) //雪碧图生成,浏览器前缀自动补齐,IE hacker
.pipe(gulp.dest(DST_DIR + '/css/'))
.pipe(rev.manifest())
.pipe(gulp.dest(DST_DIR + '/rev/css'));
});
/**
* 压缩HTML引入版本号文件
*/
gulp.task('rev-min-html', function() {
return gulp.src([DST_DIR + '/rev/**/*.json', SRC_DIR + '/view/**/*.html'])
.pipe(revCollector())
.pipe(gulpif(
condition, minifyHtml({
empty: true,
spare: true,
quotes: true
})
))
.pipe(gulp.dest(DST_DIR + '/view'));
});
/*
* PC打包方案
*/
gulp.task('pc', gulpSequence(
'clean', 'min-img', 'rev-min-css', 'rev-min-js', 'rev-min-html'
));
gulp.task('default', ['pc'], function() {
// return del(['tmp/']);
});
四.效果
- cmd运行命令gulp





Gulp实战(二)的更多相关文章
- 前端构建大法 Gulp 系列 (四):gulp实战
前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...
- 前端构建大法 Gulp 系列 (二):为什么选择gulp
系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...
- coreseek实战(二):windows下mysql数据源部分配置说明
coreseek实战(二):windows下mysql数据源部分配置说明 关于coreseek在windows使用mysql数据源的配置,以及中文分词的详细说明,请参考官方文档: mysql数据源配置 ...
- Gulp实战和原理解析
Gulp实战和原理解析(以weui作为项目实例)http://i5ting.github.io/stuq-gulp/
- 【NFS项目实战二】NFS共享数据的时时同步推送备份
[NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...
- chrome调试工具高级不完整使用指南(实战二)
3.3 给页面添加测试脚本 在现实的工作中,我们往往会遇到一些问题在线上就会触发然后本地就触发不了的问题.或者是,要给某个元素写一个测试脚本.这个时候如果是浏览器有提供一个添加脚本的功能的话,那么我们 ...
- Python爬虫实战二之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...
- 转 Python爬虫实战二之爬取百度贴吧帖子
静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...
- Netty 仿QQ聊天室 (实战二)
Netty 聊天器(百万级流量实战二):仿QQ客户端 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之15 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在 ...
随机推荐
- 【转载】Restful 简介
转自阮一峰的网络日志 http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种&quo ...
- C#操作sql通用类 SQLHelper
Codeusing System; using System.Data; using System.Configuration; using System.Web; using System.Web. ...
- 有如下Student 对象, private String name; private int age; private int score; private String classNum; 其中,classNum
package homework003; import java.util.ArrayList; import java.util.List; public class Text { public s ...
- MySQL订单分库分表多维度查询
转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询 MySQL分库分表,一般只能按照一个维度进行查询. 以订单 ...
- mac ssh会话复制
第一次登录服务器,需要输入账户.密码, 如果你需要重新开启另一个终端窗口,再次登录此服务器不需要输入账户.密码(类似免登).你只要让本地保存你的SSH会话即可. Mac 保持会话,需要在修改 ssh配 ...
- 详解UML中的聚合,关联,泛化等关系
1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...
- 【转】使用junit4进行单元测试(高级篇)
转自:http://blog.csdn.net/andycpp/article/details/1329218 通过前 2 篇文章,您一定对 JUnit 有了一个基本的了解,下面我们来探讨一下JUni ...
- 使用日志服务LogHub替换Kafka
https://yq.aliyun.com/articles/35979#index_section
- Input
Input Basic Input Old Input Files Please note that both Input and Request do NOT sanitize your data, ...
- 如何获取SQL Server数据库元数据的方法
发布时间:2007.06.15 05:05 来源:赛迪网 作者:3946469 元数据简介 元数据 (metadata) 最常见的定义为“有关数据的结构数据”,或者再简单一点就是“关于数据 ...