'use strict'; var gulp = require('gulp'); var path = require('path'); var config = require('./config'); var _ = require('lodash'); var wiredep = require('wiredep').stream; var $ = require('gulp-load-plugins')({ pattern: ['gulp-*', 'main-bower-files', 'uglify-save-license', 'del', 'imagemin-pngquant'] }); var sass = require('gulp-sass'); gulp.task('clean:dist', function() { $.del([path.join(config.paths.dist, '/')]); }); /** * [生成Html模版文件] */ gulp.task('partials', function() { return gulp.src([ path.join(config.paths.src, '/app/**/*.html') ]) .pipe($.minifyHtml({ empty: true, spare: true, quotes: true })) .pipe($.angularTemplatecache('templateCacheHtml.js', { module: config.modules.templateModuleName, root: 'app' })) .pipe(gulp.dest(config.paths.tmp + '/partials/')); }); /** * [Html,Js,Css压缩合并] */ gulp.task('html', ['plug:timestamp', 'inject', 'partials'], function() { var partialsInjectFile = gulp.src(path.join(config.paths.tmp, '/partials/templateCacheHtml.js'), { read: false }); var partialsInjectOptions = { starttag: '', ignorePath: path.join(config.paths.tmp, '/partials'), addRootSlash: false }; var htmlFilter = $.filter('*.html', { restore: true }); var jsFilter = $.filter('**/*.js', { restore: true }); var cssFilter = $.filter('**/*.css', { restore: true }); return gulp.src(path.join(config.paths.tmp, '/serve/*.html')) //error .pipe($.plumber(config.errorHandler())) //inject template .pipe($.inject(partialsInjectFile, partialsInjectOptions)) //js .pipe($.useref()) //合并和压缩 .pipe(jsFilter) //修复HTML图片地址 .pipe($.replace('app/assets/', 'assets/')) .pipe($.stripDebug()) .pipe($.uglify()) .pipe(jsFilter.restore) //css .pipe(cssFilter) //修复HTML图片地址 .pipe($.replace('app/assets/', 'assets/')) .pipe($.replace('(assets/', '(../assets/')) .pipe($.autoprefixer({ browsers: ['last 20 versions'], cascade: false })) .pipe($.csso()) .pipe(cssFilter.restore) //md5后缀 .pipe($.if('*.css', $.rev())) .pipe($.if('*.js', $.rev())) //替换md5后缀的文件名 .pipe($.revReplace()) //html处理 .pipe(htmlFilter) // .pipe($.replace('', '')) .pipe($.minifyHtml({ empty: true, spare: true, quotes: true, conditionals: true })) .pipe(htmlFilter.restore) .pipe(gulp.dest(path.join(config.paths.dist, '/'))) .pipe($.size({ title: path.join(config.paths.dist, '/'), showFiles: true })); }); /** * [图片压缩] */ gulp.task('images', function() { return gulp.src([ path.join(config.paths.src, '/assets/images/**/*'), path.join('!' + config.paths.src, '/assets/images/sprite/**/*') ]) .pipe($.imagemin({ progressive: true, svgoPlugins: [{ removeViewBox: false }], use: [$.imageminPngquant()] })) .pipe(gulp.dest(path.join(config.paths.dist, '/assets/images'))); }); gulp.task('fonts', function() { return gulp.src(config.vendor.base.source, { base: 'bower_components' }) .pipe($.filter('**/*.{eot,svg,ttf,woff,woff2}')) .pipe($.flatten()) .pipe(gulp.dest(path.join(config.paths.dist, '/font/'))); }); /** * [复制文件] 前端依赖库以及静态文件 */ gulp.task('plug:timestamp', function() { return gulp.src([ path.join(config.paths.src, '/app/constant/plug.constant.js') ]) .pipe($.replace(/.js\?timestamp=.*?\'/g, '.js?timestamp='+(new Date()).getTime()+'\'')) .pipe($.replace(/.css\?timestamp=.*?\'/g, '.css?timestamp='+(new Date()).getTime()+'\'')) .pipe(gulp.dest(path.join(config.paths.src, '/app/constant'))); }); gulp.task('other:vendor', function() { return gulp.src([ path.join(config.paths.src, '/vendor/**/*') ]) .pipe($.filter(function(file) { return file.stat.isFile(); })) .pipe(gulp.dest(path.join(config.paths.dist, '/vendor'))); }); gulp.task('other:plug', ['other:plug:css'], function() { return gulp.src([ path.join(config.paths.src, '/plug/**/*.js'), ]) .pipe($.filter(function(file) { return file.stat.isFile(); })) .pipe($.stripDebug()) .pipe($.uglify()) .pipe(gulp.dest(path.join(config.paths.dist, '/plug'))); }); gulp.task('other:plug:css', function() { return gulp.src([ path.join(config.paths.src, '/plug/**/*'), path.join('!' + config.paths.src, '/plug/**/*.scss'), path.join('!' + config.paths.src, '/plug/**/*.js') ]) .pipe(gulp.dest(path.join(config.paths.dist, '/plug'))); }); gulp.task('plug:compass', function() { return gulp.src(path.join(config.paths.src, '/plug/**/*.scss')) .pipe(sass().on("error", sass.logError)) .pipe(gulp.dest(path.join(config.paths.src, '/plug'))); }); gulp.task('other:libs', function() { return gulp.src([ path.join(config.paths.src, '/libs/**/*') ]) .pipe($.filter(function(file) { return file.stat.isFile(); })) .pipe(gulp.dest(path.join(config.paths.dist, '/libs'))); }); gulp.task('other:assets', function() { return gulp.src([ path.join(config.paths.src, '/app/assets/**/*') ]) .pipe($.filter(function(file) { return file.stat.isFile(); })) .pipe(gulp.dest(path.join(config.paths.dist, '/assets'))); }); gulp.task('build', $.sequence('prod-config', ['clean:dist', 'html'], ['images', 'fonts'], 'other:vendor', 'other:plug', 'other:libs', 'other:assets')); gulp.task('build:e2e', $.sequence('test-config', ['clean:dist', 'html'], ['images', 'fonts'], 'other:vendor', 'other:assets'));