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(// 优化commongulp.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(// 优化commongulp.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);});
});

转载于:https://www.cnblogs.com/mjian/p/9250144.html

gulp build相关推荐

  1. 运行gulp build时报错:error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style

    报错截图: 报错的原因是项目代码做了eslint的规范检查,规定了换行需要以unix系统的换行方式,Linux下只有换行LF, 而在window下换行默认是CRLF,在window系统下git pul ...

  2. 是否可以将标志传递给Gulp以使其以不同方式运行任务?

    本文翻译自:Is it possible to pass a flag to Gulp to have it run tasks in different ways? Normally in Gulp ...

  3. 马上开始写 react ES6 --- 基于gulp 和 Babel 的脚手架

    我对 react 很有兴趣,但是我发现想写 react 不容易. 我需要在开始写代码之前做很多准备工作,我需要编译jsx文件,引入react等等,而最新的react示例,有鼓励ES6来书写代码,可以用 ...

  4. 前端基于gulp后端基于freemarker的工作流程总结

    前言 最近在做一个PC端的项目,由于项目需要兼容到IE8,所以从技术选型上采取了公司之前一直沿用的前端基于gulp后端基于freemarker的模式来进行开发. 那么gulp+freemarker这种 ...

  5. 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上

    阅读目录 理想的前端开发流程 Gulp 为何物 webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟.哈哈,没耐心的直接戳我到高潮部分. 理想的前端开发流程 在 ...

  6. gulp + webpack + sass 学习

    笔记: 1. new webpack.optimize.CommonsChunkPlugin 核心作用是抽离公共代码,chunks:['index.js','main.js'] 另一个作用就是单独生成 ...

  7. Gulp和Webpack对比

    在现在的前端开发中,前后端分离.模块化开发.版本控制.文件合并与压缩.mock数据等等一些原本后端的思想开始逐渐渗透到"大前端"的开发中.前端开发过程越来越繁琐,当今越来越多的网站 ...

  8. gulp简单入坑介绍

    gulp简单介绍 目录 gulp简介 gulp与grunt的区别 nodejs和npm 创建一个npm项目 -- npm init . 为我的项目安装npm插件 -- npm install * gu ...

  9. 自动化构建工具Grunt、Gulp

    使用grunt完成项目的自动化构建 一.准备工作 grunt快要退出历史舞台了,简单学习下 mkdir my-grunt yarn init --yes //创建package模块 yarn add ...

最新文章

  1. 干掉Navicat:这个IDEA的兄弟真香!
  2. Core Java笔记 2.继承
  3. hibernate异常之--count查询异常
  4. 云闪付单个红包最高2018,这是要打败支付宝的节奏吗?
  5. [react] 说说Context有哪些属性?
  6. sql 整改措施 注入_SQL注入入侵防范措施
  7. 教大家如何选购直播声卡
  8. QPSK映射关系与差分编码
  9. Url Rewrite Filter 3.2.0中文手册
  10. SQL server-数据库的创建
  11. 中国防静电塑料卷轴市场深度研究分析报告
  12. 计算机驱动安装的几个方法,不会安装驱动有福了,2个方法教你安装驱动程序,非常实用的知识...
  13. Android 集成友盟推送方案(1)
  14. 《会计信息系统》课程期末复习题与参考答案
  15. 面试容易紧张,有哪些小技巧可以缓解紧张呢?
  16. 百度贴吧挖坟实时监控 python版
  17. 大数据Kudu(二):Kudu架构
  18. ArangoDB数据库——AQL常用函数(二)
  19. Vue 图片上传功能
  20. pytorch在调用GPU的时候出现cuda runtime error (2) : out of memory at ..\aten\src\THC\THCGeneral.cpp:50

热门文章

  1. mysql如何复制表结构,包括主键,索引等等
  2. jsp整合mybatis案例
  3. 对某bc站的一次渗透测试
  4. select函数及fd_set介绍
  5. 《剑指offer》从上往下打印二叉树
  6. redis实战之使用redis实现排行榜
  7. 互联网公司面试经历(转载)
  8. 8大排序算法图文讲解
  9. 【solr专题之四】关于VelocityResponseWriter
  10. 理解CMS GC日志