gulp生成发布包脚本
var formPost = require('./tools/submit.js');
var gulp = require('gulp'),
zip = require('gulp-zip'),
htmlmin = require('gulp-htmlmin'),
cssmin = require('gulp-minify-css'),
imagemin = require('gulp-imagemin'),
pngquant = require('imagemin-pngquant'),
uglify = require('gulp-uglify'),
clean = require('gulp-clean');
cache = require('gulp-cache'),
replace = require('gulp-replace');
minimist = require('minimist'),
gulpif = require('gulp-if'),
stripDebug = require('gulp-strip-debug'),
gulpSequence = require('gulp-sequence'),
rev = require('gulp-rev'),
del = require('del'),
vinylPaths = require('vinyl-paths'),
rename = require('gulp-rename'),
//browserSync = require('browser-sync'),
revCollector = require('gulp-rev-collector');
var configInfo = require("./tools/config_develop.json");
var platformType = {
DEVELOP:1,
TEST:2,
PUBLISH:3
};
var knownOptions = {
number: ['ver',"env"],
default: {
ver: '0.2.0',
env:platformType.DEVELOP
}
};
var processoptions = minimist(process.argv.slice(2), knownOptions);
var zipFileName = function(){
return 'html5_'+configInfo.name +"_"+ processoptions.ver+'.zip';
};
gulp.task("clean", function(){
return gulp.src([configInfo.targetdirectory])
.pipe(clean());
});
gulp.task('minify:html', function () {
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
minifyCSS: true//压缩页面CSS
};
return gulp.src(['html/*.html', 'index.html', 'error404.html'],{ base: "." })
// .pipe(stripDebug())
.pipe(htmlmin(options))
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('minify:css', function () {
return gulp.src(['css/*.css','!css/mui.css'])
.pipe(cssmin())
.pipe(gulp.dest(configInfo.targetdirectorywww + 'css'));
});
gulp.task('minify:image', function () {
return gulp.src(['img/*.{png,jpg,gif}', "img/**/*.{png,jpg,gif}"])
.pipe(imagemin({
// use: [pngquant({quality: '65-80'})],
optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true ,//类型:Boolean 默认:false 多次优化svg直到完全优化
use: [pngquant()],
}))
.pipe(gulp.dest(configInfo.targetdirectorywww + 'img'));
});
gulp.task('minify:js', function () {
return gulp.src(['js/*.js', 'js/**/*.js', '!js/config.js', '!js/libs/mui.js'])
.pipe(stripDebug())
.pipe(uglify({
// mangle: true,//类型:Boolean 默认:true 是否修改变量名
// mangle: {except: ['require' ,'exports' ,'module' ,'$']}//排除混淆关键字
// compress: true,//类型:Boolean 默认:true 是否完全压缩
// preserveComments: 'all' //保留所有注释
}))
.pipe(gulp.dest(configInfo.targetdirectorywww + 'js'));
});
gulp.task('copy:files', function () {
return gulp.src(['manifest.json', "fonts/**", "!fonts/iconfont.ttf"], {base: "."})
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('copy:filesall', function(){
return gulp.src(['js/**/*','!js/config.js','html/*.html','css/*','img/**/*','index.html',"error404.html",'manifest.json', "fonts/**"], {base: "."})
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('replace:dev', function () {
return gulp.src(["js/config.js"])
.pipe(gulp.dest(configInfo.targetdirectorywww + "js"));
});
gulp.task('replace:test', function () {
return gulp.src(["js/config.js"])
.pipe(uglify())
.pipe(replace(new RegExp(/IP:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP:"http://172.18.0.6/"'))
.pipe(replace(new RegExp(/IP_CHAT:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP_CHAT:"http://172.18.0.6/"'))
.pipe(replace(new RegExp(/IP_FILE:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP_FILE:"http://172.18.0.6/"'))
.pipe(replace(new RegExp(/,CHAT:"shengqi-api\/chat\/"/), ',CHAT:"chat/"'))
.pipe(gulp.dest(configInfo.targetdirectorywww + "js"));
});
gulp.task('replace:publish', function () {
return gulp.src(["js/config.js"])
.pipe(uglify())
.pipe(replace(new RegExp(/IP:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP:"http://sqapp.miligames.com/"'))
.pipe(replace(new RegExp(/IP_CHAT:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP_CHAT:"http://sqapp.miligames.com/"'))
.pipe(replace(new RegExp(/IP_FILE:"(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w-./?%&=]*)?"/), 'IP_FILE:"http://sqapp.miligames.com/"'))
.pipe(replace(new RegExp(/,CHAT:"shengqi-api\/chat\/"/), ',CHAT:"chat/"'))
.pipe(gulp.dest(configInfo.targetdirectorywww + "js"));
});
gulp.task('build:version', function(){
return gulp.src(["version.txt"])
.pipe(replace(new RegExp(/.*/), processoptions.ver))
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('upload', function(){
formPost.postFormInfo(configInfo.uploadip, processoptions.ver,configInfo.targetzip + "/"+zipFileName(), configInfo);
});
gulp.task('archive', function () {
return gulp.src(configInfo.targetdirectory + '**')
.pipe(zip(zipFileName()))
.pipe(gulp.dest(configInfo.targetzip));
});
gulp.task('build:dev', gulpSequence(["clean"], ['copy:filesall', "build:version", "replace:dev"], ["archive"], ["upload"]));
//gulp.task('build:test', gulpSequence(["clean"], ["minify:html", 'minify:css','minify:js','minify:image','copy:files', 'replace:test',"build:version"], ["archive"], ["upload"]));
gulp.task('build:test', gulpSequence(["clean"], ['copy:filesall', 'replace:test',"build:version"], ["archive"], ["upload"]));
gulp.task('build:publish', gulpSequence(["clean"], ["minify:html", 'minify:css','minify:js','minify:image','copy:files', 'replace:publish',"build:version"], ["archive"], ["upload"]));
gulp.task("app-build", function(){
switch (processoptions.env) {
case platformType.DEVELOP:
configInfo = require("./tools/config_develop.json");
//gulp.start("build:dev");
gulp.start("b:dev");
break;
case platformType.TEST:
configInfo = require("./tools/config_test.json");
//gulp.start("build:test");
gulp.start("b:test");
break;
case platformType.PUBLISH:
configInfo = require("./tools/config_publish.json");
//gulp.start("build:publish");
gulp.start("b:publish");
break;
}
});
//=========================================================================================================
var cssSrc = 'css/**/app*.css';
gulp.task('mfy:image', function () {
return gulp.src(['img/*.{png,jpg,gif}', "img/**/*.{png,jpg,gif}"])
.pipe(imagemin({
// use: [pngquant({quality: '65-80'})],
optimizationLevel: 5, //类型:Number 默认:3 取值范围:0-7(优化等级)
progressive: true, //类型:Boolean 默认:false 无损压缩jpg图片
interlaced: true, //类型:Boolean 默认:false 隔行扫描gif进行渲染
multipass: true ,//类型:Boolean 默认:false 多次优化svg直到完全优化
use: [pngquant()],
}))
.pipe(gulp.dest(configInfo.targetdirectorywww + 'img'));
});
gulp.task('css_rev', function() {
return gulp.src([cssSrc, 'css/im_chat.css', '!css/mui*.css'])
.pipe(rename(function (path) {
//path.basename += ".min";
path.extname = ".css"
}))
.pipe(rev())
.pipe(gulpif(processoptions.env == platformType.PUBLISH, cssmin()))
.pipe(gulp.dest("css2"))
.pipe(rev.manifest())
.pipe(gulp.dest("rev/css"));
});
gulp.task('js_rev', function() {
return gulp.src(['js/*.js', 'js/**/*.js', '!js/cursormanager.js', '!js/config.js', '!js/libs/*.js'], {base: "."})
.pipe(rename(function (path) {
//path.basename += ".min";
path.extname = ".js"
}))
.pipe(rev())
.pipe(gulpif(processoptions.env == platformType.PUBLISH, uglify({})))
.pipe(gulp.dest("js2"))
.pipe(rev.manifest())
.pipe(gulp.dest("rev/js"));
});
gulp.task('replace_js_rev', ['replace_css_rev', 'js_rev'], function() {
gulp.src(["rev/js/**/*.json", 'html2/*.html'])
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest("html3"));
return gulp.src(["rev/js/**/*.json", 'html2/html/*.html'])
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest("html3/html"));
});
gulp.task('replace_css_rev', ['css_rev'], function() {
gulp.src(["rev/css/**/*.json", '*.html'])
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest("html2"));
return gulp.src(["rev/css/**/*.json", 'html/*.html'])
.pipe(revCollector({
replaceReved: true
}))
.pipe(gulp.dest("html2/html"));
});
gulp.task('cp:html', ['replace_js_rev'], function() {
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
minifyCSS: true//压缩页面CSS
};
gulp.src(['html3/html/*.html'], {base: "."})
.pipe(rename({dirname: ''})).pipe(gulpif(processoptions.env == platformType.PUBLISH, htmlmin(options)))
.pipe(gulp.dest(configInfo.targetdirectorywww + "html"));
return gulp.src(['html3/*.html'])
.pipe(rename({dirname: ''})).pipe(gulpif(processoptions.env == platformType.PUBLISH, htmlmin(options)))
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('cp:files', ['cp:reved_css','replace_css_rev'], function () {
return gulp.src(['manifest.json', 'css/mui*.css', "fonts/**", "!fonts/iconfont.ttf"], {base: "."})
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('cp:filesall', ['cp:reved_css','replace_css_rev'], function(){
return gulp.src(['!js/config.js','css/mui*.css','img/**/*',"error404.html",'manifest.json', "fonts/**"], {base: "."})
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('cp:unreved_js', ['js_rev'], function () {
gulp.src(['js/libs/*.js'])
.pipe(stripDebug())
.pipe(gulpif(processoptions.env == platformType.PUBLISH, uglify({})))
.pipe(gulp.dest(configInfo.targetdirectorywww + 'js/libs'));
return gulp.src(['js/cursormanager.js'])
.pipe(stripDebug())
.pipe(gulpif(processoptions.env == platformType.PUBLISH, uglify({})))
.pipe(gulp.dest(configInfo.targetdirectorywww + 'js'));
});
gulp.task('cp:reved_js', ['js_rev'], function() {
return gulp.src(['js2/**/*.js'])
.pipe(gulp.dest(configInfo.targetdirectorywww));
});
gulp.task('cp:reved_css', ['css_rev'], function() {
return gulp.src(['css2/*'])
.pipe(rename({dirname: ''}))
.pipe(gulp.dest(configInfo.targetdirectorywww + "css/"));
});
gulp.task("cl:tmp", function(){
//gulp.src([configInfo.targetdirectorywww + "html/*.html"]).pipe(vinylPaths(del));
return gulp.src(['js2','css2','html2', 'html3', 'rev'])
.pipe(clean());
});
gulp.task('b:dev', gulpSequence(["clean"], ['cp:filesall', 'cp:unreved_js','cp:html', 'cp:reved_js', "build:version", "replace:dev"], ["archive"], ["upload"],['cl:tmp']));
gulp.task('b:publish', gulpSequence(["clean"], ['cp:unreved_js','cp:html','cp:reved_js','mfy:image','cp:files', 'replace:publish',"build:version"], ["archive"],['cl:tmp']));
gulp.task('b:test', gulpSequence(["clean"], ['cp:filesall', 'cp:unreved_js','cp:html', 'cp:reved_js', 'replace:test',"build:version"], ["archive"],["upload"],['cl:tmp']));
//gulp.task('browser-sync', function () {
// var files = [
// './**/*.html',
// './css/**/*.css',
// './imgs/**/*.png',
// './js/**/*.js'
// ];
// browserSync.init(files, {
// server: {
// baseDir: './'
// }
// });
//});
gulp生成发布包脚本的更多相关文章
- 给ASP.NET Core Web发布包做减法
1.引言 紧接上篇:ASP.NET Core Web App应用第三方Bootstrap模板.这一节我们来讲讲如何优化ASP.NET Core Web发布包繁重的问题. 在ASP.NET Core W ...
- 给控件做数字签名之一:将控件打包为Web发布包 [转]
微软代码签名证书使用指南 http://www.wotrust.com/support/signcode_guide.htm 签名重要性:http://www.wotrust.com/FAQ/whyS ...
- NET Core Web发布包
给ASP.NET Core Web发布包做减法 https://www.cnblogs.com/sheng-jie/p/9122582.html 1.引言 紧接上篇:ASP.NET Core Web ...
- Flutter:发布包
[package] 生成包含模块化Dart代码的可共享Flutter项目 [plugin] 生成一个可共享的Flutter项目, 在Dart代码中包含带有API的API, 针对Android的平台特定 ...
- npm ERR publish 403,nodejs发布包流程
nodejs学习体验之发布包,发布环境如下:1:win10系统,2:已安装nodejs. 具体操作步骤如下: *编写模块 1)新建文件夹,比如:somepackage 2) 该文件夹下新建js文件,比 ...
- Gulp解决发布线上文件(CSS和JS)缓存问题
Gulp解决发布线上文件(CSS和JS)缓存问题 本文的缘由:目前经常线上发布文件后要不断的刷新页面及过很长时间,页面上的CSS和JS文件才能生效,特别对于目前做微信商城的时候,微信内置的浏览器缓存非 ...
- npm发布包--所遇到的问题
npm发布包: 解决方案--npm adduser的坑:http://www.tuicool.com/articles/FZbYve npm ERR publish 403,nodejs发布包流程 : ...
- python发布包到pypi的踩坑记录
前言 突然想玩玩python了^_^ 这篇博文记录了我打算发布包到pypi的踩坑经历.python更新太快了,甚至连这种发布上传机制都在不断的更新,这导致网上的一些关于python发布上传到pypi的 ...
- npm学习(七)之如何发布包、更新发布包、删除发布包
前言 我们经常使用npm来下载别人的模块或者说包,那么我们如何将自己写的模块上传到npm呢? 了解npm政策 在开始之前,最好回顾一下npm的政策,以防您对站点礼仪.命名.许可或其他指导原则有疑问. ...
随机推荐
- linux 下启动tomca慢问题
编辑文件vim /etc/profile 后面加入一句:export JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom" 设置立 ...
- Java多线程——可阻塞的队列BlockingQueue
阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量. ArrayBlockingQueue 只有put方法和ta ...
- Runtime、System、Object
Runtime---->Runtime.getRuntime().gc(); System---->System.gc(); Object---->finalize();
- http 断点续传
一.序 Hi,大家好,我是承香墨影! HTTP 协议在网络知识中占据了重要的地位,HTTP 协议最基础的就是请求和响应的报文,而报文又是由报文头(Header)和实体组成.大多数 HTTP 协议的使用 ...
- Spring Boot项目使用Eclipse进行断点调试Debug
1.在命令行下定位到项目根目录,启动Spring Boot项目,命令如下: java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=80 ...
- Python爬虫-爬取科比职业生涯高清图集
前面学习了Python爬取豆瓣电影Top250的数据,爬取的信息是电影信息的文本信息,但是在互联网上流行的图片才有更大的吸引力,本篇我们来使用python爬取网页上的图片并保存在本地硬盘上,很兴奋吧, ...
- 修改ftp服务的监听端口
需求说明: 今天在做一个项目的时候,低端的端口都给屏蔽掉了,需要进行修改为高端端口才能访问,在此记录下. 操作过程: 1.修改ftp的配置文件vsftpd.conf,增加以下的配置 listen_po ...
- python使用paramiko自动化部署linux程序
使用paramiko模块,比os模块和command模块更加的兼容各种环境.后面两个只能在服务器本机 执行,此模块写得python文件无论是在本地还是服务器本身上运行,都能兼容. paramiko模块 ...
- ios开发之--比较两个数组里面的值是否相同
比较两个数组里面的内容是否相同,代码如下: NSArray *array1 = [NSArray arrayWithObjects:@"a", @"b", @& ...
- CentOS下安装vsftpd
因为FTP的端口是 两个,一个是固定21端口,还有一个任意端口的数据通道.关键是任意端口不好搞. 首先在vsftpd的配置文件中设置 任意端口的范围 [root@localhost root]# vi ...