zoukankan      html  css  js  c++  java
  • Gulp(一)

    一.简介

    gulp 是基于 Nodejs 的自动任务运行器,能自动化地完成javascript/coffee/sass/less/html/image/css等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。

    在实现上, gulp 借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单.

    二.配置文件

    var gulp = require('gulp');
    var del = require('del');//删除文件/文件夹
    var rev = require('gulp-rev');//对文件名加MD5后缀
    var nano = require('gulp-cssnano');//删除空白和注释,并且压缩代码
    var uglify = require('gulp-uglify');//通过UglifyJS来压缩JS文件
    var useref = require('gulp-useref');
    var imagemin = require('gulp-imagemin');//压缩图片文件(包括PNG、JPEG、GIF和SVG图片)
    var revCollector = require('gulp-rev-collector');//路径替换
    var browserSync = require('browser-sync').create();//静态文件服务器,同时也支持浏览器自动刷新
    var gulpSequence = require('gulp-sequence');
    var uncss = require('gulp-uncss');
    var htmlmin = require('gulp-htmlmin');
    var base64 = require('gulp-base64');
    var changed = require('gulp-changed');
    var postcss = require("gulp-postcss");//css预编译器
    var sprites = require('postcss-sprites').default;//CSS精灵
    var autoprefixer = require('autoprefixer');//自动补全浏览器兼容性前缀
    var cssgrace = require('cssgrace');//CSS后处理工具,hackIE
    
    var SRC_DIR = './src/';
    var PKG_DIR = './tmp/pkg/';
    var REV_DIR = './tmp/rev/';
    var DST_DIR = './dist/';
    var UNCSS_REG = [/.advise/, /.block/, /.g-bd .m-view-2 .category li:nth-child/, /^.g-bd ul li .info/, /.hljs/];
    
    gulp.task('clean', function() {
        return del(['dist', 'tmp']);
    });
    
    /*
     * 合并请求
     * <!-- build:css ../css/index.pkg.css --><!-- endbuild -->
     * <!-- build:js ../js/index.pkg.js --><!-- endbuild -->
     */
    gulp.task('pkg', function() {
        return gulp.src(SRC_DIR + 'view/*.html')
            .pipe(useref())
            .pipe(gulp.dest(PKG_DIR + 'view/'));
    });
    
    /*
     * 移动非jpg/png资源到img文件夹
     * 
     */
    gulp.task('move-img-other', function() {
        return gulp.src([SRC_DIR + 'img/**/*.*!(jpg|png)', SRC_DIR + 'component/img/**/*.*!(jpg|png)'])
            .pipe(gulp.dest('./tmp/pkg/img/'));
    });
    
    /*
     * 压缩IMG
     * 
     */
    gulp.task('min-img', function() {
        return gulp.src([SRC_DIR + 'img/**/*.*(jpg|png)', SRC_DIR + 'component/img/**/*.*(jpg|png)'])
            .pipe(imagemin())
            .pipe(gulp.dest('./tmp/pkg/img/'));
    });
    
    /*
     * 压缩CSS(PC)
     * 
     */
    gulp.task("min-css-pc", function() {
        // PostCSS
        var processors = [
            sprites({
                'stylesheetPath': PKG_DIR + 'css/',
                'spritePath': PKG_DIR + 'img/'
            }),
            autoprefixer({
                browsers: ['> 1%', 'last 2 versions', 'ie 6-11']
            }),
            cssgrace
        ];
        return gulp.src([PKG_DIR + 'css/**/*.css'])
            .pipe(nano({
                discardComments: {
                    removeAll: true
                }
            }))
            .pipe(postcss(processors))
            .pipe(gulp.dest(PKG_DIR + 'css/'))
    });
    
    /*
     * 压缩CSS(Mobile)
     * 
     */
    gulp.task("min-css-mobile", function() {
        // PostCSS
        var processors = [
            autoprefixer({
                browsers: ['> 1%', 'last 2 versions']
            })
        ];
        return gulp.src([PKG_DIR + 'css/**/*.css'])
            .pipe(uncss({
                html: [PKG_DIR + '**/*.html'],
                ignore: UNCSS_REG
            })).pipe(nano({
                discardComments: {
                    removeAll: true
                }
            }))
            .pipe(postcss(processors))
            .pipe(gulp.dest(PKG_DIR + 'css/'))
    });
    
    /*
     * 压缩JS
     * 
     */
    gulp.task('min-js', function() {
        return gulp.src(PKG_DIR + 'js/**/*.js')
            .pipe(uglify())
            .pipe(gulp.dest(PKG_DIR + 'js/'));
    });
    
    /*
     * 版本化IMG
     * 
     */
    gulp.task('rev-img', function() {
        return gulp.src(PKG_DIR + 'img/**/*')
            .pipe(rev())
            .pipe(gulp.dest(REV_DIR + 'img/'))
            .pipe(rev.manifest())
            .pipe(gulp.dest(REV_DIR + 'img/'));
    });
    
    /*
     * 版本化CSS
     * 
     */
    gulp.task('rev-css', function() {
        return gulp.src(PKG_DIR + 'css/**/*')
            .pipe(rev())
            .pipe(gulp.dest(REV_DIR + 'css/'))
            .pipe(rev.manifest())
            .pipe(gulp.dest(REV_DIR + 'css/'));
    });
    
    /*
     * 版本化JS
     * 
     */
    gulp.task('rev-js', function() {
        return gulp.src(PKG_DIR + 'js/**/*')
            .pipe(rev())
            .pipe(gulp.dest(REV_DIR + 'js/'))
            .pipe(rev.manifest())
            .pipe(gulp.dest(REV_DIR + 'js/'));
    });
    
    /*
     * 收集图片到CSS
     */
    gulp.task('col-css', function() {
        return gulp.src([REV_DIR + 'img/*.json', REV_DIR + 'css/*.css'])
            .pipe(revCollector())
            .pipe(gulp.dest(DST_DIR + 'css/'));
    });
    
    /*
     * 移动IMG文件到目标文件夹
     */
    gulp.task('col-img', function() {
        return gulp.src([REV_DIR + 'img/*', '!' + REV_DIR + '/img/*.json'])
            .pipe(gulp.dest(DST_DIR + 'img/'));
    });
    
    /*
     * 移动JS文件到目标文件夹
     */
    gulp.task('col-js', function() {
        return gulp.src(REV_DIR + 'js/*.js')
            .pipe(gulp.dest(DST_DIR + 'js/'));
    });
    
    /*
     * 收集资源到HTML
     */
    gulp.task('col-html', function() {
        return gulp.src([REV_DIR + '**/*.json', PKG_DIR + 'view/*.html'])
            .pipe(revCollector())
            .pipe(htmlmin({
                // collapseWhitespace: true,
                removeComments: true
            }))
            .pipe(gulp.dest(DST_DIR + 'view/'));
    });
    
    /*
     * 图片base64
     */
    gulp.task('base64', function() {
        return gulp.src(PKG_DIR + '/**/*.css')
            .pipe(base64({
                extensions: ['svg', 'png', /.jpg#datauri$/i],
            }))
            .pipe(gulp.dest(PKG_DIR));
    });
    
    
    /*
     * 移动mock文件夹
     */
    gulp.task('move-mock', function() {
        return gulp.src(SRC_DIR + 'mock/**/*')
            .pipe(gulp.dest(DST_DIR + 'mock/'));
    });
    
    /*
     * 静态服务器
     */
    gulp.task('bs', function() {
        browserSync.init({
            files: "**", //监听整个项目
            open: "external",
            server: {
                baseDir: "./dist/",
                index: 'view/index.html'
            }
        });
    });
    
    /*
     * 静态服务器(代理)
     */
    gulp.task('bsp', function() {
        browserSync.init({
            proxy: "127.0.0.1"
        });
    });
    
    /*
     * PC打包方案
     */
    gulp.task('pc', gulpSequence(
        'clean', 'pkg', 'min-img', 
        ['min-img', 'min-css-pc', 'min-js'], 'move-img-other', 
        ['rev-img', 'rev-css', 'rev-js'], 
        ['col-img', 'col-css', 'col-js', 'col-html'],
        'move-mock', 'bs'
    ));
    
    /*
     * Mobile打包方案
     */
    gulp.task('mobile', gulpSequence(
        'clean', 'pkg', 'min-img', 'base64', 'move-img-other',
        ['min-img', 'min-css-mobile', 'min-js'], 
        ['rev-img', 'rev-css', 'rev-js'], 
        ['col-img', 'col-css', 'col-js', 'col-html'],
        'move-mock', 'bs'
    ));
    
    
    gulp.task('default', ['pc'], function() {
        return del(['tmp/']);
    });
  • 相关阅读:
    flex4的s:states和mx:states的区别
    Flash Builder快捷键
    PE经典DIY案例1:全解开方案让量产PE也能
    U+V2深度隐藏PE制作技术初探
    SQL Server存储过程的删除方法
    利用sql server直接创建日历
    推荐一个好的数据库工具Embarcadero DBArtisan
    css样式大全(整理版)
    asp.net Excel导入&导出
    SQL删除重复数据方法
  • 原文地址:https://www.cnblogs.com/winyou/p/5483068.html
Copyright © 2011-2022 走看看