项目使用的gulp自动化任务

//定义输出文件夹名称
var distFolderH5 = "distH5";
var distFolderMofang = "distMofang"; //定义根目录路径
var baseUrl = "../";
//定义html目录路径
var tplUrl = "../tpl/";
//定义js目录路径
var jsUrl = "../js/";
//定义css目录路径
var cssUrl = "../css/";
//定义sass目录路径
var sassUrl = "../sass/";
//定义less目录路径
var lessUrl = "../less/";
//定义font目录路径
var fontUrl = "../fonts/";
//定义img目录路径
var imgUrl = "../img/";
//定义媒体目录路径
var mediaUrl = "../media/";
//定义第三方库目录路径
var libUrl = "../lib/";
//定义版本号文件输出根目录
var revDist = "../rev/";
//定义html版本号输出目录路径
var revTplUrl = "../rev/tpl/";
//定义js版本号输出目录路径
var revJsUrl = "../rev/js/";
//定义css版本号输出目录路径
var revCssUrl = "../rev/css/";
//定义font版本号输出目录路径
var revFontUrl = "../rev/fonts/";
//定义img版本号输出目录路径
var revImgUrl = "../rev/img/";
//定义媒体文件版本号输出目录路径
var revMediaUrl = "../rev/media/";
//定义第三方库版本号输出目录路径
var revLibUrl = "../rev/lib/"; setDistFolder(distFolderH5); function setDistFolder(distFolder){
//定义输出目录名称
distName = distFolder;
//定义输出根目录
dist = "../"+distFolder+"/";
//定义html输出目录路径
distTplUrl = "../"+distFolder+"/tpl/";
//定义js输出目录路径
distJsUrl = "../"+distFolder+"/js/";
//定义css输出目录路径
distCssUrl = "../"+distFolder+"/css/";
//定义font输出目录路径
distFontUrl = "../"+distFolder+"/fonts/";
//定义img输出目录路径
distImgUrl = "../"+distFolder+"/img/";
//定义媒体输出目录路径
distMediaUrl = "../"+distFolder+"/media/";
//定义第三方库输出目录路径
distLibUrl = "../"+distFolder+"/lib/";
} var gulp = require('gulp'),
//压缩html,可以压缩页面javascript、css,去除页面空格、注释,删除多余属性等操作
html = require('gulp-htmlmin'),
//sass编译
sass = require('gulp-sass'),
//对sass路径进行转换
slash = require('slash'),
//less编译
less = require('gulp-less'),
//css压缩
minifycss = require('gulp-clean-css'),
//js压缩
uglify = require('gulp-uglify'),
//文件合并
concat = require('gulp-concat'),
//文件重命名
rename = require('gulp-rename'),
//清空文件夹
clean = require('gulp-clean'),
//压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant'),
//对文件名加MD5后缀
rev = require('gulp-rev'),
//路径替换
revCollector = require('gulp-rev-collector'),
//上传ftp服务器
ftp = require('gulp-ftp'),
//上传sftp服务器
sftp = require('gulp-sftp'),
//控制task顺序
gulpSequence = require('gulp-sequence');
//创建服务器
connect = require('gulp-connect');
//任务提醒
notify = require('gulp-notify'); //gulp-html参数配置
var htmlOptions = {
//清除HTML注释
removeComments: true,
//压缩HTML
//collapseWhitespace: true,
//省略布尔属性的值 <input checked="true"/> ==> <input />
collapseBooleanAttributes: true,
//删除所有空格作属性值 <input id="" /> ==> <input />
removeEmptyAttributes: true,
//删除<script>的type="text/javascript"
removeScriptTypeAttributes: true,
//删除<style>和<link>的type="text/css"
removeStyleLinkTypeAttributes: true,
//压缩页面JS
//minifyJS: true,
//压缩页面CSS
//minifyCSS: true
}; //tpl模板压缩
gulp.task('tpl',function(){
gulp.src(baseUrl+'index.html')
.pipe(html(htmlOptions))
//.pipe(rev())
.pipe(gulp.dest(dist))
//.pipe(rev.manifest())
//.pipe(gulp.dest(revDist)) gulp.src(tplUrl+'**/*.html')
.pipe(html(htmlOptions))
.pipe(rev())
.pipe(gulp.dest(distTplUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revTplUrl))
}); //css压缩添加版本号
gulp.task('cssMin', function() {
return gulp.src(cssUrl+'*.css')
.pipe(minifycss())
.pipe(rev())
.pipe(gulp.dest(distCssUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revCssUrl));
}); //css合并添加版本号
gulp.task('cssCon', function() {
//需要处理的css文件,放到一个字符串数组里
return gulp.src(cssUrl+'*.css')
//合并后的文件名
.pipe(concat('build.min.css'))
//压缩处理成一行
.pipe(minifycss())
//文件名加MD5后缀
.pipe(rev())
//输出文件本地
.pipe(gulp.dest(distCssUrl))
//生成一个rev-manifest.json
.pipe(rev.manifest())
//将 rev-manifest.json 保存到 rev 目录内
.pipe(gulp.dest(revCssUrl+'combine/'));
}); //复制未压缩的js添加版本号
gulp.task('jsNotMin', function () {
return gulp.src([jsUrl+'config.js'])
.pipe(rev())
.pipe(gulp.dest(distJsUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revJsUrl+'notmin/'));
}); //js压缩添加版本号
gulp.task('jsMin', function () {
return gulp.src([jsUrl+'*.js', "!"+jsUrl+'config.js'])
//.pipe(uglify())
.pipe(rev())
.pipe(gulp.dest(distJsUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revJsUrl+'min/'));
}); //js合并添加版本号
gulp.task('jsCon', function () {
return gulp.src([jsUrl+'*.js', "!"+jsUrl+'config.js', "!"+jsUrl+'shareMin.js'])
.pipe(uglify())
.pipe(concat('build.min.js'))
.pipe(rev())
.pipe(gulp.dest(distJsUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revJsUrl+'combine/'));
}); //图片压缩添加版本号
gulp.task('img',function() {
return gulp.src(imgUrl+'**/*')
.pipe(rev())
.pipe(imagemin({progressive: true, svgoPlugins:[{removeViewBox:false}], use:[pngquant({quality: '70'})]}))
.pipe(gulp.dest(distImgUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revImgUrl))
}); //sass编译
gulp.task('sass', function () {
return gulp.src(sassUrl+'*.scss')
.pipe(sass({outputStyle: 'compressed'}))
.pipe(gulp.dest(cssUrl))
//.pipe(connect.reload());
}); //less编译
gulp.task('less', function () {
return gulp.src(lessUrl+'*.less')
.pipe(less())
.pipe(gulp.dest(cssUrl));
}); //添加版本号
gulp.task('revIndex', function () {
return gulp.src([revDist+'**/*.json', dist+'index.html'])
.pipe(revCollector({ replaceReved:true }))
.pipe(gulp.dest(dist))
});
gulp.task('revTpl', function () {
return gulp.src([revDist+'**/*.json', distTplUrl+'**/*.html'])
.pipe(revCollector({ replaceReved:true }))
.pipe(gulp.dest(distTplUrl))
});
gulp.task('revCss', function () {
return gulp.src([revDist+'**/*.json', distCssUrl+'**/*.css'])
.pipe(revCollector({ replaceReved:true }))
.pipe(gulp.dest(distCssUrl))
});
gulp.task('revJs', function () {
return gulp.src([revDist+'**/*.json', distJsUrl+'**/*.js'])
.pipe(revCollector({ replaceReved:true }))
.pipe(gulp.dest(distJsUrl))
}); //复制媒体文件和lib文件
gulp.task('copyFile', function () {
gulp.src([mediaUrl+'**/*'])
.pipe(rev())
.pipe(gulp.dest(distMediaUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revMediaUrl)); gulp.src([fontUrl+'**/*'])
.pipe(rev())
.pipe(gulp.dest(distFontUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revFontUrl)); gulp.src([libUrl+'**/*'])
.pipe(rev())
.pipe(gulp.dest(distLibUrl))
.pipe(rev.manifest())
.pipe(gulp.dest(revLibUrl));
}); //清空输出目录并删除改目录
gulp.task('clean', function() {
return gulp.src([baseUrl+distName, baseUrl+'/rev'], {read: false})
.pipe(clean({force: true}));
}); //var ftpConfig = {
// "localPath": {
// "base": "../dist/"
// },
// "remotePath": {
// "base": "dreamGame",
// "project": "/var/disk/web/dev_local/app_web0/m.huanhuba.com/h5dev/dreamGame"
// },
// "project":{
// "ftpTest": {
// "use": true,
// "host": "120.55.102.1",
// "port":"220",
// "user": "web",
// "pass": "web123!@#"
// }
// }
//}
////上传ftp服务器
//gulp.task('ftp', function () {
// return gulp.src(ftpConfig)
// .pipe(sftp({
// host: '120.55.102.1',
// port: 220,
// user: 'web',
// pass: 'web123!@#'
// }));
//}) //使用connect启动一个Web服务器
gulp.task('connect', function () {
connect.server({
//服务器根目录
root: baseUrl,
//访问IP
ip: '127.1.1.1',
//访问端口
port: '8080',
//是否启用热加载
livereload: false
});
}); // gulp.task('reload', function () {
// gulp.src(tplUrl+'*.html')
// .pipe(connect.reload());
// }); //打包任务
//[]中的是异步,运行完后运行rev
gulp.task("buildH5", function(cb){
setDistFolder(distFolderH5);
gulpSequence(['clean'], ['tpl'], ['copyFile', 'cssMin', 'cssCon', 'jsNotMin', 'jsMin', 'jsCon', 'img'], ['revIndex', 'revTpl', 'revCss', 'revJs'])(cb)
}); gulp.task("buildMofang", function(cb){
setDistFolder(distFolderMofang);
gulpSequence(['clean'], ['tpl'], ['copyFile', 'cssMin', 'cssCon', 'jsNotMin', 'jsMin', 'jsCon', 'img'], ['revIndex', 'revTpl', 'revCss', 'revJs'])(cb)
}); //监控
gulp.task('watch',function(){
//gulp.watch(tplUrl+'*.html', ['html']);
gulp.watch(sassUrl+'**/*.scss', ['sass']);
//gulp.watch(cssUrl+'**/*.css', ['cssMin', 'cssCon']);
//gulp.watch(jsUrl+'**/*.js', ['jsMin', 'jsCon']);
});

package.json需要安装的一些模块

{
"name": "projectName",
"version": "1.0.0",
"description": "projectDesc",
"devDependencies": {
"bower": "^1.7.7",
"del": "^2.2.0",
"gulp": "^3.9.1",
"gulp-clean": "^0.3.2",
"gulp-clean-css": "^2.0.7",
"gulp-concat": "^2.6.0",
"gulp-connect": "^4.1.0",
"gulp-ftp": "^1.1.0",
"gulp-htmlmin": "^2.0.0",
"gulp-imagemin": "^3.0.1",
"gulp-jshint": "^2.0.0",
"gulp-less": "^3.1.0",
"gulp-notify": "^2.2.0",
"gulp-rename": "^1.2.2",
"gulp-rev": "^7.0.0",
"gulp-rev-collector": "^1.0.3",
"gulp-ruby-sass": "^2.0.6",
"gulp-sass": "^2.3.1",
"gulp-sequence": "^0.4.5",
"gulp-sftp": "^0.1.5",
"gulp-uglify": "^1.5.3",
"gulp-util": "^2.2.14",
"imagemin": "^5.1.1",
"imagemin-pngcrush": "^4.1.0",
"imagemin-pngquant": "^5.0.0",
"jshint": "^2.9.1",
"shelljs": "^0.3.0",
"slash": "^1.0.0"
},
"dependencies": {
"textangular": "^1.5.4"
}
}

gulp添加版本号还要改一些东西,如下

http://www.tuicool.com/articles/UbaqyyJ

gulp任务的更多相关文章

  1. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  2. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  3. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  4. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  5. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  6. 做一个gulp+webpack+vue的单页应用开发架子

    1.目标 最近项目上的事情不多,根据我自己的开发习惯,决定开发一些简单的开发架子,方便以后事情多的时候直接套用.本文讲的一个gulp+webpack+vue的单页应用架子,想要达到的目的: 可以通过命 ...

  7. 前端自动化构建工具gulp记录

    一.安装 1)安装nodejs 通过nodejs的npm安装gulp,插件也可以通过npm安装.windows系统是个.msi工具,只要一直下一步即可,软件会自动在写入环境变量中,这样就能在cmd命令 ...

  8. gulp初学

    原文地址:gulp初学 至于gulp与grunt的区别,用过的人都略知一二,总的来说就是2点: 1.gulp的gulpfile.js  配置简单而且更容易阅读和维护.之所以如此,是因为它们的工作方式不 ...

  9. gulp批量打包文件并提取公共文件

    gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器. browseriyf是模块化打包工具. 一般情况下,Browserify 会把所有的模块打包成单个文件.单个文件在大多数情况下是 ...

  10. 使用gulp解决RequireJS项目前端缓存问题(二)

    1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...

随机推荐

  1. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  2. CozyRSS开发记录5-订阅列表栏里的项

    CozyRSS开发记录5-订阅列表栏里的项 1.订阅列表栏里的项的原型图 这里列表项依然参考傲游的RSS阅读器,以后可能会微调. 2.使用ControlTemplate来定制ListBoxItem 给 ...

  3. C++ 数字转换为string类型

    经常需要循环读入多组序号的图像,需要将int转换为string,简单的函数代码如下: #include <sstream>#include <string> string In ...

  4. 【Mybatis框架】查询缓存(一级缓存)

    做Java的各位程序员们,估计SSH和SSM是我们的基础必备框架.也就是说我们都已经至少接触过了这两套常见的集成框架.当我们用SSH的时候,相信很多人都接触过hibernate的两级缓存,同样,相对应 ...

  5. java线程池ThreadPoolExecutor使用简介

    一.简介线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(int corePoolSize, int m ...

  6. Android实现自定义带文字和图片的Button

    Android实现自定义带文字和图片的Button 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法. 一.用系统自带的Button实现 最简单的一种办法就 ...

  7. 使用bind方法确定接收者

    var buffer = { entries : [], add : function(s){ this.entries.push(s); }, concat : function(){ return ...

  8. devexpress 安装及破解

    安装dx DXperience-10.1.4 破解文件下载

  9. RUDP之二 —— Sending and Receiving Packets

    原文链接 原文:http://gafferongames.com/networking-for-game-programmers/sending-and-receiving-packets/ Send ...

  10. 基于RXTX的串口通讯 windows64位系统可用

    项目地址 http://download.csdn.net/detail/xqshishen/7739539