var c = {
rootPath: 'src',//项目文件夹
outputPath: 'output',//文件编译后的输出目录
revPath: 'manifest',//rev映射文件目录
appjs: 'app.js',// run JS
homePage: 'index.html',
cssFolderPaths: ['css'],//需要压缩的CSS目录
jsFolderPaths: ['model'],//需要压缩的JS目录
ngjsFolderPaths: ['app', 'common', 'directives', 'filters'],//需要压缩的ngJS目录
htmlFolderPaths: ['app', 'layout'],
filterFolderPaths: ['frameworks', 'images']
}; var root = function (path) {
if (path)
return c.rootPath + '/' + path
return c.rootPath;
}; var output = function (path) {
if (path)
return c.outputPath + '/' + path
return c.outputPath;
} var fs = require('fs');
var path = require('path');
var gulp = require("gulp"),
clean = require('gulp-clean'),
ngAnnotate = require('gulp-ng-annotate'),//压缩ngjs
util = require('gulp-util'),
filter = require('gulp-filter'),
ngmin = require('gulp-ngmin'),
stripDebug = require('gulp-strip-debug'),
minifyhtml = require("gulp-minify-html"),//压缩html
minify = require("gulp-minify-css"),//压缩css
uglify = require("gulp-uglify"),//压缩代码
rename = require("gulp-rename"),//重命名
concat = require("gulp-concat"),//合并代码
sourcemaps = require("gulp-sourcemaps"),
rev = require("gulp-rev"),//对文件名加MD5后缀
revReplace = require("gulp-rev-replace"),//路径替换
merge = require("merge-stream"); //入口命令
gulp.task('run', ['clear'],
function () {
setTimeout(function () {
gulp.run([
'filter',
'css',
'html',
'global',
'model',
'ngjs'], function () {
var manifest = gulp.src("./" + c.revPath + '/*.json');
return gulp.src([root(c.homePage)])
.pipe(revReplace({
manifest: manifest
}))
.pipe(gulp.dest(c.outputPath));
});
}, 2000);
}); //所有不需要压缩及合并的目录
gulp.task('filter', function () {
return c.filterFolderPaths.map(function (cpath) {
return gulp.src([root(cpath + '/**')])
.pipe(gulp.dest(output(cpath)));
});
}); //压缩css
gulp.task('css', function () {
var tasks = c.cssFolderPaths.map(function (cpath) {
return gulp.src([root(cpath + '/**/*.css')])
.pipe(minify())
.pipe(rev())
.pipe(gulp.dest(output(cpath)))
.pipe(rev.manifest(cpath + '.json'))
.pipe(gulp.dest('./' + c.revPath));
});
return merge(tasks);
}); //压缩html
gulp.task('html', function () {
var tasks = c.htmlFolderPaths.map(function (cpath) {
return gulp.src([root(cpath + '/**/*.html')])
.pipe(minifyhtml())
.pipe(gulp.dest(output(cpath)));
});
return merge(tasks);
}); //压缩global js文件,并替换index.html中的引用
gulp.task('global', function () {
return gulp.src([root('/*.js')])
.pipe(ngAnnotate())
.pipe(ngmin({ dynamic: false }))
.pipe(stripDebug())
.pipe(uglify({ outSourceMap: false }))//压缩ngjs
// .pipe(concat(c.appjs))
.pipe(rev()) //文件名加MD5后缀
.pipe(gulp.dest(c.outputPath))
.pipe(rev.manifest('global.json'))//生成manifest.json
.pipe(gulp.dest('./' + c.revPath));
}); //压缩model
gulp.task('model', function () {
var tasks = c.jsFolderPaths.map(function (cpath) {
return gulp.src([root(cpath + '/**/*.js')])
.pipe(uglify())
.pipe(rev())
.pipe(gulp.dest(output(cpath)))
.pipe(rev.manifest(cpath + '.json'))
.pipe(gulp.dest('./' + c.revPath));
});
return merge(tasks);
}); //压缩ngjs
gulp.task('ngjs', function () {
var tasks = c.ngjsFolderPaths.map(function (cpath) {
return gulp.src([root(cpath + '/**/*.js')])
.pipe(uglify())
.pipe(rename(function (path) {
if (path.basename.toLowerCase().indexOf('login') > -1) {
path.basename = path.basename.toLowerCase();
}
return path;
}))
.pipe(rev())
.pipe(gulp.dest(output(cpath)))
.pipe(rev.manifest(cpath + '.json'))
.pipe(gulp.dest('./' + c.revPath));
});
return merge(tasks);
}); //清理目录
gulp.task('clear', function () {
gulp.src(c.outputPath, { read: false })
.pipe(clean());
gulp.src(c.revPath, { read: false })
.pipe(clean());
gulp.src(['dist', 'rev'], { read: false })
.pipe(clean());
//gulp.src(root('/**/*.*scc'), { read: false })
// .pipe(clean());
});

  

记录下自己写的gulp打包脚本的更多相关文章

  1. Linux下Maven+SVN自动打包脚本

        公司的开发环境每次部署项目都很麻烦,需要手动打包并上传上去.这个太麻烦了,所以就准备搞个自动打包的脚本.脚本自动从svn代码库里面更新最新的代码下来,然后maven打包,最后把war包丢到to ...

  2. gulp 粗粗学习 记录下

    看视频学习 粗粗记录下 以便以后学习 1.初记录 gulp.task //定义一个任务 gulp.src //锁定到做task任务的文件路径 gulp.dest //锁定到任务做完后文件去向的路径 g ...

  3. xcode8.3 shell 自动打包脚本 记录

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

  4. webpack打包和gulp打包工具详细教程

    30分钟手把手教你学webpack实战 阅读目录 一:什么是webpack? 他有什么优点? 二:如何安装和配置 三:理解webpack加载器 四:理解less-loader加载器的使用 五:理解ba ...

  5. gulp打包详解

    gulp的作用 删除文件中冗余的内容,压缩文件,减小文件体积 实际项目中运行的都是压缩完成以后的文件 减小加载响应时间 gulp打包压缩对象 html,css,js,sass,webserver 音频 ...

  6. vmware虚拟机下ubuntu 13.04使用zeranoe脚本交叉编译ffmpeg

    2013-07-01今天是建党节,习总书记指出,党的建设要以“照镜子.正衣冠.洗洗澡.治治病”为总要求.希望我们的党越来越纯洁,为人民谋福利.言归正传,每次项目中需要编译相应的ffmpeg,都很费时费 ...

  7. 使用linux下的crontab定时任务跑定时脚本

    使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...

  8. 使用gulp打包普通项目

    前言: 在使用gulp打包工具之前,我做的H5项目在浏览器中的缓存是很严重的,若改了一点css,加了一句js代码,不手动清除浏览器缓存是看不到效果的.老总也在项目演示当中遇到这些问题,一查找原因却是缓 ...

  9. assetBundle打包脚本与LUA

    AssetBundles与脚本 所有Unity的AssetBundle,无论是从本地获取 还是www,或者打包整个场景.物体上的脚本都不会被编译.所以AssetBundle打包的时候即使物体上有脚本. ...

随机推荐

  1. 【OC学习-12】什么是类的继承?为什么要继承?以及继承里面的注意事项

    (1)怎样实现类的继承? //之前的继承根类,如类ASStudent继承自根类 @interface ASStudent:NSObject{ } @end //如今继承现有自己定义的类,如ASStud ...

  2. c# Buffer.BlockCopy 合并 byte 数组

    今天遇到点问题需要合并 多个  byte[] 参见 :  http://q.cnblogs.com/q/30534/ 今天复习了 所有数组的基类是 Array

  3. C语言第12轮:指针

    C语言第12轮:指针 [学习目标] 1.        指针 2.        指针与数组 A: 指针的概念 内存存储单元按字节排序.每一个字节编有序号.我们称之为地址.因为能够通过地址就能够找到所 ...

  4. WaitHandle、AutoResetEvent、ManualResetEvent

    多线程中的锁系统(三)-WaitHandle.AutoResetEvent.ManualResetEvent 介绍 本章主要说下基于内核模式构造的线程同步方式,事件,信号量. 目录 一:理论 二:Wa ...

  5. Python 3.3 try catch所有的错误Error,不包括Exception。关键在于 sys.exc_info()

    import os; import sys; #---------------------------------------------- def main( ) : try : a = 1 / 0 ...

  6. Cocos2d-x3.0 Json解析

    2dx3.0下一个JSON解析库官员以及集成.我们参考一下吧OK. JSON文件hello.json内容 {"pets":["dog","cat&qu ...

  7. Win8.1系统下配置搭建IIS8.5+PHP5.5.4运行环境

    原文 Win8.1系统下配置搭建IIS8.5+PHP5.5.4运行环境 很多人喜欢用linux搭建php网页语言运行环境,但由于linux高度自定义化,经常需要root运行命令,略显高端,相对应的微软 ...

  8. jquery 产品查看放大镜组件

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. javascript 日期对象(date)详解

    Date 对象 Date 对象用于处理日期和时间. 创建 Date 对象的语法: var myDate=new Date(); 注释:Date 对象会自动把当前日期和时间保存为其初始值. 1.date ...

  10. 使用ServletContext实现数据共享和获得web.xml中的参数

    //适用于:很多文件需要初始化参数时,例如数据库账号和密码,不可能使用config这个对象,因为如果使用config对象去配置的话,那么每个servlet类都必须写一个参数,这时候就必须采用conte ...