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 聊天室 实战 源码 写在 ...
随机推荐
- 【转】Javascript 面向对象编程(一):封装
原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript ...
- Swif基本语法以及与OC比较三
(未 经 博 主 同 意,不 得 转 载 !) ------------------------华丽分割线----------------------- // // main.swift ...
- Android使用的开发MediaRecorder录制视频
MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...
- MySQL和PostgreSQL 导入数据对照
在虚拟机上測评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 由于是虚拟机上的測评,所以时间仅仅做參考,不要太较真, 看看就好了.MySQL 工具: 1. 自带 ...
- 使用pypi镜像源加速第三方库在线安装
用easy_install和pip来安装第三方库很方便 它们的原理其实就是从Python的官方源pypi.python.org/pypi 下载到本地,然后解包安装. 不过因为某些原因,访问官方的pyp ...
- C#_delegate - Pair<T> & 简单顺序逆序 & 方法委托(在Pair类下)&枚举类型 混搭使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Models
Models Models control the data source, they are used for collecting and issuing data, this could be ...
- 汽车OBD2诊断程序开发 (原文转载,思路很清晰!)
1.因TL718已经为你建立了物理层.数据链层和部分应用层的协议,所以只要OBD2标准应用层协议文本,ISO15031-5 或 SAE J1979(这两个协议是相同的内容). 2.TL718诊断 ...
- 自定义控件(视图)1期笔记01:View 和 ViewGroup
1.View 和 ViewGroup 图解关系: 2. View 和 ViewGroup 关系和作用: (1) 关系: • 继承关系 • 组合关系 (2) 作用: • View的作用: 提供 ...
- Linux下mplayer源代码安装方法
http://www.linuxidc.com/Linux/2007-08/6820.htm 1下载安装mplayer需要的各种软件 去这里下载http://www.mplayerhq.hu/MPla ...