gulp自动化处理

//范例
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

原文地址:https://www.cnblogs.com/chenzxl/p/15476011.html