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 聊天室 实战 源码 写在 ...
随机推荐
- API功能测试如何实施(转载自测试之道 微信公众号)
什么是API 关于定义什么的,直接维基可得: API(Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定.由于近 ...
- 常用SQL代码段
代码使用时须测试. --聚合函数 use pubs go select avg(distinct price) --算平均数 from titles where type='business' go ...
- iOS安全系列之一:HTTPS (轉載)
如何打造一个安全的App?这是每一个移动开发者必须面对的问题.在移动App开发领域,开发工程师对于安全方面的考虑普遍比较欠缺,而由于iOS平台的封闭性,遭遇到的安全问题相比于Android来说要少得多 ...
- asp.net中application,cookies,stateview,session的使用
Cookie Cookie的用法也和ASP中差不多.比如我们建立一个名为aspcn,值为飞刀的cookie HttpCookie cookie = new HttpCookie["aspcn ...
- JSon实体类快速生成插件 GsonFormat 1.2.0
写在前头:本插件只适用 android studio和 Intellij IDEA 工具,eclipse 的少年无视我吧!!! 这是一个根据JSONObject格式的字符串,自动生成实体类参数. gi ...
- jeasyUI属性列表
属性分为CSS片段和JS片段. CSS类定义:1.div easyui-window 生成一个window窗口样式. 属性如下: 1)mod ...
- hdu 3732 Ahui Writes Word
这是一道背包题,当你题读完了的时候,你会觉得这道题明明就是01背包的完全版吗! no no no no no no no no no no no~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- FactoryBean的使用--转
一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean .在某些情况下,实例化bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的 ...
- iOS 对网络视频采集视频截图
在播放网络视频是 经常可以看到播放按钮下面是该制品的某个截图 : 一般情况下 后台服务器是可以把视频截图一起返回给你 你直接拿到图片显示就可以了 但是当后台没有提供时 我们也可以根据视频地址 自 ...
- mysql:慢查询日志slow_query_log
1.慢查询日志:当查询超过一定的时间没有返回结果的时候,才会记录到慢查询日志中.默认不开启.采样的时候手工开启.可以帮助DBA找出执行慢的SQL语句 2.常用的参数详解: 注意:修改以下参数,需要重新 ...