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 聊天室 实战 源码 写在 ...
随机推荐
- C++面向对象三大特性
面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...
- DRM你又赢了:其API纳入HTML5标准
摘要:W3C今天发布了一份加密媒体扩展工作草案(EME),将支持DRM多媒体数字内容,而且浏览器将无需使用Flash或Silverlight.EME定义了一系列API,允许JavaScript和HTM ...
- 安卓开发21:深入理解Handler
Handler相关说明: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:安卓的UI线程(即OnCreate函数创建的线程)是线程非安全的.也就是说,在UI线程中,使用sleep这样 ...
- BZOJ 1143: [CTSC2008]祭祀river 最长反链
1143: [CTSC2008]祭祀river Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- Upcase 将edit1中的每个字符串改为首字母大写
//将edit1中的每个字符串改为首字母大写 procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);begin with ...
- [MODx] 5. WayFinder
1. Install the wayFinder package 2. Select the resource which you want to show: The 'published' reso ...
- Google maps API开发(一)(转)
一.加载Google maps API <script type="text/javascript" src="http://ditu.google.com/map ...
- Database and models
Database and models The database Now that we have the Album module set up with controller action met ...
- php安装ecshop
1.apache2.2正常 2.源码htdoc下面保存不动 3.E:\PHP 安装目录下 php5.3.28 就不支持jpeg php5.2.17 就不支持 mysql 说明就是php的问题,因为其他 ...
- Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...