gulp build
gulp打包脚本
var gulp = require('gulp');
var gutil = require('gulp-util');
var chalk = require('chalk');
var fs = require('fs');
var _ = require('underscore');
var path = require('path');
var amdOptimize = require("amd-optimize");
var concat = require('gulp-concat');
var rimraf = require('gulp-rimraf');
var uglify = require('gulp-uglify');
var through2 = require("through2");
var ejs = require("gulp-ejs");
var less = require('gulp-less');
var minifyCSS = require('gulp-minify-css');
var runSequence = require('run-sequence');
// var imagemin = require('gulp-imagemin');
var zip = require('gulp-zip');
var shell = require('child_process');
var pkg = require('./package.json');
var merge = require("merge-stream");
var BUILD_TIMESTAMP = gutil.date(new Date(), "yyyymmddHHMMss");
var Utils = require("./gulputil/utils");
var htmlmin = require('gulp-htmlmin');
var Config = require("./gulputil/gulp.config")();
//获取时间戳
pkg.build = BUILD_TIMESTAMP;
// 设置默认工作目录
process.chdir(Config.workDir);
// 获取管道env参数
var argv = process.argv.slice(2);
//检查环境变量参数
var env = Config.checkEnv(argv);
//设置根目录
var CONTEXT_PATH = Config.CONTEXT_PATH;
//设置环境变量
var nativeApi = Config.nativeApi;
var handleEnv = Config.handleEnv();
/*
* 清空目标工程目录
*/
gulp.task('clean', function() {
return gulp.src(Config.clean_src, {
read: false
})
.pipe(rimraf({
force: true
}));
});
/*
* 拷贝文件到目标工程目录
*/
gulp.task('copy', function() {
return gulp.src(Config.copy_src)
.pipe(handleEnv())
.pipe(gulp.dest(Config.dest));
});
/*
* 拷贝源文件文件到目标工程目录
*/
gulp.task('source', function() {
return gulp.src(Config.source_src)
.pipe(gulp.dest(Config.source_dest));
});
/*
* 编译ejs页面
*/
gulp.task("ejs", function() {
return gulp.src(Config.ejs_src)
.pipe(ejs({
ctx: CONTEXT_PATH,
_build: {
pkg: pkg,
version: pkg.version,
ts: BUILD_TIMESTAMP,
env: env,
nativeApi: nativeApi
},
Utils: new Utils(env),
_: _,
data: {},
delimiter: "@"
}, {
root: __dirname + "/templates"
}))
.pipe(htmlmin({collapseWhitespace: true}))
.pipe(gulp.dest(Config.ejs_dest));
})
/*
* 编译less
*/
gulp.task('less', function() {
return gulp.src(Config.less_src)
.pipe(less({
Config: [path.join(__dirname, 'less', 'includes')]
}))
.pipe(minifyCSS())
.pipe(gulp.dest(Config.less_dest));
});
/*
* 编译压缩css
*/
gulp.task('minifycss', function() {
return gulp.src(Config.minifycss_src)
.pipe(minifyCSS())
.pipe(gulp.dest(Config.minifycss_dest));
});
// /*
// * 图片压缩
// */
// gulp.task("imagemin",function(){
// return gulp.src(Config.src+'/images/*')
// .pipe(imagemin({
// progressive: true,
// optimizationLevel:3,
// svgoPlugins: [{removeViewBox: false}]
// }))
// .pipe(gulp.dest(Config.dest+'/images'));
// })
/*
* 编译压缩js
*/
gulp.task('uglifyjs', function() {
return gulp.src(Config.uglifyjs_src)
.pipe(handleEnv())
.pipe(uglify({
// output: {
// max_line_len: 120
// }
}).on("error", gutil.log))
.pipe(gulp.dest(Config.uglifyjs_dest));
});
// /*
// * 编译压缩js
// */
// gulp.task('concat_modules', function() {
// var files = fs.readdirSync(Config.concat_modules_src);
// var dirs = [];
// var sequence = [];
// _.each(files, function(fn) {
// var fname = Config.concat_modules_src + "/"+fn;
// var stat = fs.lstatSync(fname);
// if (stat.isDirectory() == true) {
// dirs.push(fname)
// }
// sequence.push(
// gulp.src(fname+"/**/*.js")
// .pipe(concat("main.js"))
// .pipe(gulp.dest(Config.concat_modules_dest+"/"+fn))
// )
// })
// return merge.apply(this,sequence);
// // return gulp.src(Config.uglifyjs_src)
// // .pipe(concat({
// // output: {
// // max_line_len: 120
// // }
// // }).on("error", gutil.log))
// // .pipe(gulp.dest(Config.uglifyjs_dest));
// });
/*
* require js 优化
*/
gulp.task("js_optimize", function() {
var sequence = [];
sequence.push(
// 优化common
gulp.src(Config.src + "/js/**/*.js")
.pipe(amdOptimize("C", {
configFile: Config.src + "/lib/require-config.js",
paths: Config.exclude
}))
.pipe(handleEnv())
// 合并
.pipe(concat("common.js"))
// .pipe(uglify().on("error", gutil.log))
// 输出
.pipe(gulp.dest(Config.dest + "/js/common"))
);
var files = fs.readdirSync(Config.concat_modules_src);
var dirs = [];
var sequence = [];
_.each(files, function(fn) {
var fname = Config.concat_modules_src + "/" + fn;
var stat = fs.lstatSync(fname);
if (stat.isDirectory() == true) {
if (fs.existsSync(Config.src + "/modules/" + fn + "/index.js")) {
sequence.push(
// 优化common
gulp.src(Config.src + "/modules/**/*.js")
.pipe(amdOptimize("modules/" + fn + "/index", {
configFile: Config.src + "/lib/require-config.js",
paths: Config.exclude
}))
.pipe(handleEnv())
// 合并
.pipe(concat("index.js"))
// .pipe(uglify().on("error", gutil.log))
// 输出
.pipe(gulp.dest(Config.concat_modules_dest + "/" + fn))
)
}
}
})
return merge.apply(this, sequence);
});
/*
* 打包zip
*/
gulp.task('archive', function() {
return gulp.src(Config.archive_src)
.pipe(zip(pkg.name + "_v_" + pkg.version.replace(/\./g, "_") + "_" + env.toLowerCase() + "_" + BUILD_TIMESTAMP + '.zip'))
.pipe(gulp.dest(Config.output));
});
// gulp.task('archive', function () {
// return gulp.src('src/*')
// .pipe(zip('archive.zip'))
// .pipe(gulp.dest('dist'));
// });
/*
* 部署到测试环境
*/
gulp.task('deploy', function() {
});
gulp.task('clean_patch', function() {
return gulp.src(Config.clean_patch, { read: false })
.pipe(rimraf({ force: true }));
});
/*
* 拷贝文件到目标工程目录
*/
gulp.task('copy_patch', function() {
var filelist = fs.readFileSync("../patchlist.txt","UTF-8");
filelist = filelist.replace(/\r/g,"");
var list = filelist.split("\n");
var rs = [];
var obj = {};
_.each(list,function(item){
if(/^modules/.test(item)){
var items = item.split("/");
item = [items[0],items[1],"**/*"].join("/");
}
obj[item]=true;
})
for(var key in obj){
console.log(key);
rs.push(key);
}
rs.push("js/version.js");
return gulp.src(rs,{cwd:Config.dest,base:Config.dest})
.pipe(gulp.dest(Config.patch));
});
/*
* 开始构建
*/
gulp.task('patch', function (callback) {
runSequence(
"clean_patch",
"copy_patch",
function (error) {
if (error) {
console.log(error.message);
} else {
console.log('RELEASE FINISHED SUCCESSFULLY');
}
callback(error);
});
});
/*
* 清空output目录
*/
gulp.task('clean_output', function() {
return gulp.src(Config.output, {
read: false
})
.pipe(rimraf({
force: true
}));
});
/*
* 把dist拷贝到output目录下
*/
gulp.task('copy_output', function() {
return gulp.src(Config.dest+"/**/*",{cwd:Config.dest,base:Config.dest})
.pipe(gulp.dest(Config.output+"/"+env.toLowerCase()));
});
/*
* 打包zip
*/
gulp.task('archive_output', function() {
return gulp.src(Config.output+"/**/*")
.pipe(zip('output.zip'))
.pipe(gulp.dest(Config.output));
});
/*
* 开始构建
*/
gulp.task('build', function(callback) {
runSequence(
"clean",
'less',
"copy",
'ejs',
'source',
'js_optimize',//这个运行时需要10几分钟,暂时注释掉
'uglifyjs',
// 'minifycss',
// 'archive',
function(error) {
if (error) {
console.log(error.message);
} else {
console.log('RELEASE FINISHED SUCCESSFULLY');
}
callback(error);
});
});
/*
* 监听less
*/
gulp.task('watchless', function() {
return gulp.watch(Config.src + "/less/**/*.less",function(event){
console.log(event.path);
gulp.start(["less"]);
});
});
/*
* 监听js
*/
gulp.task("watchjs",function(){
return gulp.watch(Config.src + "/**/*.js",function(event){
console.log(event.path);
gulp.start(["js_optimize","uglifyjs"]);
});
});
/*
* 监听ejs
*/
gulp.task("watchejs",function(){
return gulp.watch(Config.templates + "/**/*.ejs",function(event){
console.log(event.path);
gulp.start(["ejs"]);
});
});
/*
* watch监听 js javascript ejs
*/
gulp.task('watch', function (callback){
runSequence(
"watchless",
"watchjs",
"watchejs",
function(error) {
if (error) {
console.log(error.message);
} else {
console.log('RELEASE FINISHED SUCCESSFULLY');
}
callback(error);
});
});
/*
* 编译build,然后watch
*/
gulp.task('default', function (callback){
runSequence(
"build",
"watch",
function(error) {
if (error) {
console.log(error.message);
} else {
console.log('RELEASE FINISHED SUCCESSFULLY');
}
callback(error);
});
});

浙公网安备 33010602011771号