一.配置环境

1.基于NodeJs安装Git,npm,gulp

2.安装各类插件

3.参考文档

二.测试项目结构

三.配置文件代码

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实战(二)的更多相关文章

  1. 前端构建大法 Gulp 系列 (四):gulp实战

    前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...

  2. 前端构建大法 Gulp 系列 (二):为什么选择gulp

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  3. coreseek实战(二):windows下mysql数据源部分配置说明

    coreseek实战(二):windows下mysql数据源部分配置说明 关于coreseek在windows使用mysql数据源的配置,以及中文分词的详细说明,请参考官方文档: mysql数据源配置 ...

  4. Gulp实战和原理解析

    Gulp实战和原理解析(以weui作为项目实例)http://i5ting.github.io/stuq-gulp/

  5. 【NFS项目实战二】NFS共享数据的时时同步推送备份

    [NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...

  6. chrome调试工具高级不完整使用指南(实战二)

    3.3 给页面添加测试脚本 在现实的工作中,我们往往会遇到一些问题在线上就会触发然后本地就触发不了的问题.或者是,要给某个元素写一个测试脚本.这个时候如果是浏览器有提供一个添加脚本的功能的话,那么我们 ...

  7. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  8. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  9. Netty 仿QQ聊天室 (实战二)

    Netty 聊天器(百万级流量实战二):仿QQ客户端 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之15 [博客园 总入口 ] 源码IDEA工程获取链接:Java 聊天室 实战 源码 写在 ...

随机推荐

  1. JPA主键策略

    JPA 自带的主键策略有 4 种,在枚举 javax.persistence.GenerationType 中,分别是:TABLE.SEQUENCE.IDENTITY.AUTO. TABLE:通过表产 ...

  2. 微软.NET各子技术领域的应用前景

    从2002年微软发布.NET 1.0,其间历经了8年的发展,再到.NET 4.0,其已经成为一个庞大而复杂的软件开发与运行平台,架构日益复杂,应用领域也在不断地扩展,包容了“一堆”的子技术领域. 在. ...

  3. C#基础知识回顾-- 反射(3)

    C#基础知识回顾-- 反射(3)   获取Type对象的构造函数: 前一篇因为篇幅问题因为篇幅太短被移除首页,反射这一块还有一篇“怎样在程序集中使用反射”, 其他没有什么可以写的了,前两篇主要是铺垫, ...

  4. 授予普通域用户远程桌面连接DC/客户端权限

    普通域用户通过远程桌面登录DC: 1)将该用户加入到 Remote Desktop Users 组中

  5. 分析Model2系统心得

    分析Model2系统心得 前言:观摩他人的项目,学到一些新的.实践经验呀!!! 1.  怎样使用字符串处理类?从页面获取的Form类或者字段取值时使用. 2.在验证用户身份时,先推断username, ...

  6. 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况

    用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...

  7. iOS开发——适配篇&iOS9适配

    iOS9适配 1. Demo1_iOS9网络适配_ATS:改用更安全的HTTPS [摘要]iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL.采 ...

  8. iOS开发——基本常识篇&各种控件默认高度

    各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注意,两倍高度的状态栏在好像只能在纵向的模式下使用.如下图 用户可以隐藏状态栏,也可以将状态栏设置 ...

  9. sql server char nchar nvarchar varchar之間的區別

    char存储固定长度的字符串,最大长度为8000个字节. varchar存储可变长度的字符串.最大长度为8000个字节. nchar存储固定长度的Unicode字符串,最大长度为4000个字符. nv ...

  10. C# 之 读取Word时发生 “拒绝访问” 及 “消息筛选器显示应用程序正在使用中” 异常的处理

    1.Asp.net中建立Microsoft.Office.Interop.Word.Application时出现 “ 拒绝访问 ” 错误 项目中要实现在服务器端打开一个Word模版文件,修改其内容后再 ...