//范例 var base = 'src/'; ///项目根目录 var dist = 'dist/';// 输出目录 /// 压缩html的选项 var minHtmlOption = { collapseWhitespace: true, collapseBooleanAttributes: true, removeComments: true, removeEmptyAttributes: true, removeScriptTypeAttributes: true, removeStyleLinkTypeAttributes: true, minifyJS: true, //minifyCSS: true }; function getNowDate() { var date = new Date(); var seperator1 = ""; var seperator2 = ":"; var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate + "-" + date.getHours() + '' + date.getMinutes() + '' + date.getSeconds(); return currentdate; } var gulp = require('gulp'); var gutil = require('gulp-util'); // 引入组件 var htmlmin = require('gulp-htmlmin'), //html压缩 cleancss = require('gulp-clean-css'),//css压缩 jshint = require('gulp-jshint'),//js检测 jsuglify = require('gulp-uglify'),//js压缩 concat = require('gulp-concat'),//文件合并 rename = require('gulp-rename'),//文件更名 notify = require('gulp-notify'),//提示信息 less = require('gulp-less'),// 处理 less obfuscate = require('gulp-obfuscate'), // js 混淆加密 ngAnnotate = require('gulp-ng-annotate'),// 处理angularjs 依赖注入的插件 stripDebug = require('gulp-strip-debug'),//清除 js 里的 console与 debugger imagemin = require('gulp-imagemin'),//压缩图片 clean = require('gulp-clean'),//清空文件夹 rev = require('gulp-rev'),//更改版本号 useref = require('gulp-useref'), // 合并当前页面里的 css 与 script revReplace = require('gulp-rev-replace'), //替换文件路径 revCollector = require('gulp-rev-collector'),//gulp-rev插件,用于html模板更改引用路径 gulpSequence = require('gulp-sequence'); // gulp 事务处理,执行顺序用的 zip = require('gulp-zip'); // 检查js gulp.task('lint', function () { return gulp.src([base + '/js/*.js', base + '/js/controller/**/*.js']) .pipe(jshint()) .pipe(jshint.reporter('default')) }); //清空文件夹,避免资源冗余 gulp.task('clean', function () { return gulp.src(dist, {read: false}).pipe(clean()); }); gulp.task('obfuscateJS', function () { return gulp.src(dist + '/js/controller/*.js') //.pipe(jsuglify()) //压缩js //.pipe(obfuscate({ replaceMethod: obfuscate.ZALGO })) //加密混淆 .pipe(obfuscate()) //加密混淆 .pipe(gulp.dest(dist + '/js/controller')) }); ///处理bootstrap less gulp.task('bootstrapLess', function () { gulp.src('node_modules/bootstrap/less/bootstrap.less') .pipe(less()) //该任务调用的模块 .pipe(gulp.dest('public_html/js/plugs/bootstrap/css')) // .pipe(notify({message: 'bootstrap生成成功!'})); }); // 默认任务 gulp.task('default', function () { gulp.start('run-sequence') }); gulp.task('msg', function () { return gulp .src('') .pipe(notify({message: 'SAAF平台构建完成'})); }) /**************** **********************************************************************************************************************/ ///////// 运行顺序 ********************** 主要运行这个就可以产出整个项目 /// , 'clean-js-rev' gulp.task('run-sequence', gulpSequence('clean', ['copy-css', 'copy-fonts', 'copy-images', 'copy-plugin', 'copy-help', 'copy-importTemplate','copy-js', 'copy-directive-html', 'copy-layout-html', 'copy-layout-js', 'copy-app-html', 'copy-app-js', 'copy-index-html','copy-designerModel'], 'indexRevCss', 'indexRev', 'IndexHtmlMin', 'msg') ); gulp.task('copy-designerModel', function () { return gulp.src([base + '/app/sam/templates/processDesigner/designerModel/**/*']) .pipe(gulp.dest(dist + '/app/sam/templates/processDesigner/designerModel')) }); /// 复制CSS gulp.task('copy-css', function () { return gulp.src([base + '/css/app_*.css']) .pipe(cleancss()) //压缩css .pipe(gulp.dest(dist + '/css')) }); gulp.task('copy-plugin', function () { return gulp.src([base + '/plugin/**/*']) .pipe(gulp.dest(dist + '/plugin')) }); gulp.task('copy-help', function () { return gulp.src([base + '/help/**/*']) .pipe(gulp.dest(dist + '/help')) }); gulp.task('copy-importTemplate', function () { return gulp.src([base + '/importTemplate/**/*']) .pipe(gulp.dest(dist + '/importTemplate')) }); gulp.task('copy-js', function () { return gulp.src([base + '/js/**/*.js']) .pipe(stripDebug()) // //除去js代码中的console和debugger输出 .pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入 ***** //.pipe(obfuscate()) //加密混淆 .pipe(jsuglify()) //压缩js .on('error', function(err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) .pipe(gulp.dest(dist + '/js')) }); gulp.task('copy-html', function () { return gulp.src([base + '/**/*.html', '!' + base + '/js/plugs/**/*.html']) .pipe(htmlmin(minHtmlOption)) //压缩html .pipe(gulp.dest(dist)) }); gulp.task('copy-directive-html', function () { return gulp.src([base + '/js/**/*.html']) .pipe(htmlmin(minHtmlOption)) //压缩html .pipe(gulp.dest(dist + '/js')) }); gulp.task('copy-layout-html', function () { return gulp.src([base + '/layout/**/*.html']) .pipe(htmlmin(minHtmlOption)) //压缩html .pipe(gulp.dest(dist + '/layout')) }); gulp.task('copy-layout-js', function () { return gulp.src([base + '/layout/**/*.js']) .pipe(stripDebug()) // //除去js代码中的console和debugger输出 .pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入 ***** //.pipe(obfuscate()) //加密混淆 .pipe(jsuglify()) //压缩js .on('error', function(err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) .pipe(gulp.dest(dist + '/layout')) }); gulp.task('copy-app-html', function () { return gulp.src([base + '/app/**/*.html']) .pipe(htmlmin(minHtmlOption)) //压缩html .pipe(gulp.dest(dist + '/app')) }); gulp.task('copy-app-js', function () { return gulp.src([base + '/app/**/*.js']) .pipe(stripDebug()) // //除去js代码中的console和debugger输出 .pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入 ***** //.pipe(obfuscate()) //加密混淆 .pipe(jsuglify()) //压缩js .on('error', function(err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) .pipe(gulp.dest(dist + '/app')) }); gulp.task('copy-index-html', function () { return gulp.src([base + '/index.html']) .pipe(gulp.dest(dist)) }); gulp.task('copy-fonts', function () { return gulp.src(base + '/fonts/**/*') .pipe(gulp.dest(dist + '/fonts')) }); gulp.task('copy-images', function () { return gulp.src(base + '/img/**/*') .pipe(imagemin()) .pipe(gulp.dest(dist + '/img')); }); //打压缩包 zip gulp.task('zip', function () { return gulp.src(dist + '/**/*') //.pipe(zip(dist + '.zip')) .pipe(zip('aoyou-' + getNowDate() + '.zip')) .pipe(gulp.dest('output')); }); gulp.task('removeZip', function () { return gulp.src('output/*.*', {read: false}).pipe(clean()); }); gulp.task('zipAction', function () { gulp.start('removeZip'); gulp.start('zip') }); // *********************************************************************** 处理首页 // 合并html页面内引用的静态资源文件 gulp.task('indexMerge', function () { return gulp .src(base + 'index.html') .pipe(useref()) //合并页面资源 //.pipe(stripDebug()) // //除去js代码中的console和debugger输出 .pipe(gulp.dest(dist + '/')) }) //首页css 加版本 gulp.task('indexRevCss', function () { return gulp .src(dist + '/css/*.css') //处理 css .pipe(rev()) .pipe(cleancss()) //压缩css .pipe(gulp.dest(dist + '/css')) //输出目录 .pipe(rev.manifest()) //设置版本号 .pipe(gulp.dest(dist + '/rev/css')); //版本号输出目录 }); //首页 JS 加版本 gulp.task('indexRevJS', function () { return gulp .src(dist + '/js/haike.js') //处理js .pipe(rev()) .pipe(stripDebug()) ////除去js代码中的console和debugger输出 .pipe(ngAnnotate({single_quotes: true})) ///// 处理angularJS 依赖注入 ***** .pipe(jsuglify()) //压缩js 暂不压缩,合并后的JS压缩有报错 .on('error', function(err) { gutil.log(gutil.colors.red('[Error]'), err.toString()); }) .pipe(gulp.dest(dist + '/js/')) //输出目录 .pipe(rev.manifest()) //设置版本号 .pipe(gulp.dest(dist + '/rev/index/js')); //版本号输出目录 }); gulp.task('indexRemoveCD', function () { return gulp .src([dist + '/js/saaf-base.js', dist + '/js/ie8html.js']) //处理js .pipe(stripDebug()) ////除去js代码中的console和debugger输出 .pipe(gulp.dest(dist + '/js/')); //输出目录 }) //通过hash来精确定位到html模板中需要更改的部分,然后将修改成功的文件生成到指定目录 gulp.task('indexRev', function () { return gulp .src([dist + '/rev/**/*.json', dist + '/index.html']) .pipe(revCollector()) .pipe(gulp.dest(dist + '/')); }) ///压缩首页 gulp.task('IndexHtmlMin', function () { return gulp.src(dist + '/index.html') .pipe(htmlmin(minHtmlOption)) //压缩html .pipe(gulp.dest(dist)); }); // *********************************************************************** 处理首页 结束
好的文章
https://www.cnblogs.com/2050/p/4198792.html
https://www.cnblogs.com/starof/p/5194622.html