123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- '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: '<!-- inject:partials -->',
- 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('<base href="/">', '<base href="/eolinker/">'))
- .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'));
|