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(// 优化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相关推荐
- 运行gulp build时报错:error Expected linebreaks to be 'LF' but found 'CRLF' linebreak-style
报错截图: 报错的原因是项目代码做了eslint的规范检查,规定了换行需要以unix系统的换行方式,Linux下只有换行LF, 而在window下换行默认是CRLF,在window系统下git pul ...
- 是否可以将标志传递给Gulp以使其以不同方式运行任务?
本文翻译自:Is it possible to pass a flag to Gulp to have it run tasks in different ways? Normally in Gulp ...
- 马上开始写 react ES6 --- 基于gulp 和 Babel 的脚手架
我对 react 很有兴趣,但是我发现想写 react 不容易. 我需要在开始写代码之前做很多准备工作,我需要编译jsx文件,引入react等等,而最新的react示例,有鼓励ES6来书写代码,可以用 ...
- 前端基于gulp后端基于freemarker的工作流程总结
前言 最近在做一个PC端的项目,由于项目需要兼容到IE8,所以从技术选型上采取了公司之前一直沿用的前端基于gulp后端基于freemarker的模式来进行开发. 那么gulp+freemarker这种 ...
- 前端构建工具之争——Webpack vs Gulp 谁会被拍死在沙滩上
阅读目录 理想的前端开发流程 Gulp 为何物 webpack 又是从哪冒出来的 结论 文章有点长,总共 1800 字,阅读需要 18 分钟.哈哈,没耐心的直接戳我到高潮部分. 理想的前端开发流程 在 ...
- gulp + webpack + sass 学习
笔记: 1. new webpack.optimize.CommonsChunkPlugin 核心作用是抽离公共代码,chunks:['index.js','main.js'] 另一个作用就是单独生成 ...
- Gulp和Webpack对比
在现在的前端开发中,前后端分离.模块化开发.版本控制.文件合并与压缩.mock数据等等一些原本后端的思想开始逐渐渗透到"大前端"的开发中.前端开发过程越来越繁琐,当今越来越多的网站 ...
- gulp简单入坑介绍
gulp简单介绍 目录 gulp简介 gulp与grunt的区别 nodejs和npm 创建一个npm项目 -- npm init . 为我的项目安装npm插件 -- npm install * gu ...
- 自动化构建工具Grunt、Gulp
使用grunt完成项目的自动化构建 一.准备工作 grunt快要退出历史舞台了,简单学习下 mkdir my-grunt yarn init --yes //创建package模块 yarn add ...
最新文章
- 干掉Navicat:这个IDEA的兄弟真香!
- Core Java笔记 2.继承
- hibernate异常之--count查询异常
- 云闪付单个红包最高2018,这是要打败支付宝的节奏吗?
- [react] 说说Context有哪些属性?
- sql 整改措施 注入_SQL注入入侵防范措施
- 教大家如何选购直播声卡
- QPSK映射关系与差分编码
- Url Rewrite Filter 3.2.0中文手册
- SQL server-数据库的创建
- 中国防静电塑料卷轴市场深度研究分析报告
- 计算机驱动安装的几个方法,不会安装驱动有福了,2个方法教你安装驱动程序,非常实用的知识...
- Android 集成友盟推送方案(1)
- 《会计信息系统》课程期末复习题与参考答案
- 面试容易紧张,有哪些小技巧可以缓解紧张呢?
- 百度贴吧挖坟实时监控 python版
- 大数据Kudu(二):Kudu架构
- ArangoDB数据库——AQL常用函数(二)
- Vue 图片上传功能
- pytorch在调用GPU的时候出现cuda runtime error (2) : out of memory at ..\aten\src\THC\THCGeneral.cpp:50