• 使用gulp进行css、js压缩


    var gulp = require('gulp');
    var cleanCSS = require('gulp-clean-css');
    var concatCss = require('gulp-concat-css');
    var uglify = require('gulp-uglify');
    var concat = require('gulp-concat');
    var del = require('del');
    var gutil = require('gulp-util');
    
    //压缩的临时文件保存到storage, gitignore这些文件
    var clean_css_path = 'storage/gulp/clean_css';  //压缩css文件保存路径
    var target_css_path = 'public/gulp/css';        //最终生成的最小化css文件保存路径
    var clean_js_path = 'storage/gulp/clean_js';    //压缩js文件保存路径
    var target_js_path = 'public/gulp/js';          //最终生成的最小化js文件保存路径
    
    //为数组每一个元素加上前缀并返回修改后的数组
    //这个前缀是相对于项目根目录的目录前缀
    Array.prototype.add_prefix = function (prefix) {
        return this.map(function (path) {
            return prefix + path;
        });
    };
    
    //需要合并压缩的css
    var css_to_clean = [
        'js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css',
        'css/font-icons/entypo/css/entypo.css',
        'css/bootstrap.css',
        'css/neon-core.css',
        'css/neon-theme.css',
        'css/neon-forms.css',
        'css/custom.css',
        'js/datatables/datatables.min.css',
        'js/dropzone/dropzone.css'
        ].add_prefix('public/static/neon-res/')
         .concat([
                'fancybox/jquery.fancybox.css',
                'fancybox/helpers/jquery.fancybox-buttons.css',
                'fancybox/helpers/jquery.fancybox-thumbs.css'
         ].add_prefix('public/static/'))
        .concat('public/admin/css/neon_common.css');//自定义的css
    
    //需要合并压缩的js
    var js_to_clean = [
        //登录界面才有的js
        //下面合并js使用slice(2)去掉
        'jquery.validate.min.js',
        'neon-login.js',
    
        'jquery-1.11.3.min.js',
        'gsap/TweenMax.min.js',
        'jquery-ui/js/jquery-ui-1.10.3.minimal.min.js',
    
        'bootstrap.js',
        'joinable.js',
        'resizeable.js',
        'neon-api.js',
    
        'fileinput.js',
        'dropzone.js',
        'neon-chat.js',
        'neon-custom.js',
        'neon-demo.js'
        ].add_prefix('public/static/neon-res/js/')
        .concat([
            //自定义的js
            'public/admin/js/common.js',
            'public/admin/js/kollway_ot.js'
        ])
        .concat([
            'public/static/uploadify/jquery.uploadify.min.js',
            'public/static/H5FileUploader.js'
        ])
        .concat([
            'jquery.fancybox.pack.js',
            'helpers/jquery.fancybox-buttons.js',
            'helpers/jquery.fancybox-thumbs.js'
        ].add_prefix('public/static/fancybox/'));
    
    //压缩全部css, 直接全部合并之后好像漏掉一些css, 先压缩再合并
    gulp.task('clean-css', function () {
       return gulp.src(css_to_clean)
           .pipe(cleanCSS())
           .pipe(gulp.dest(clean_css_path));
    });
    
    
    var clean_css_callback = function () {
        var temp_array = css_to_clean.map(function (path) {
            //只获取文件名
            return clean_css_path + '/' + path.split('/').pop();
        });
        return gulp.src(temp_array)
            .pipe(concatCss('all.min.css', {basedir: target_css_path}))
            .pipe(cleanCSS())
            .pipe(gulp.dest(target_css_path));
    };
    gulp.task('css', ['clean-css'], clean_css_callback);
    
    //js
    //压缩所有js
    gulp.task('clean-js', function () {
        return gulp.src(js_to_clean)
            .pipe(uglify())
            .pipe(gulp.dest(clean_js_path));
    });
    
    var clean_js_callback = function () {
        //slice(2), 去掉登录界面的两个
        var temp_array = js_to_clean.slice(2).map(function (path) {
            return clean_js_path + '/' + path.split('/').pop();
        });
        return gulp.src(temp_array)
            .pipe(concat('all.min.js', {basedir: target_js_path}))
            .pipe(gulp.dest(target_js_path));
    };
    gulp.task('js', ['clean-js'], clean_js_callback);
    
    //清理临时文件, 需要的话清除, 使用gulp clean命令
    gulp.task('clean', function () {
       del([
           clean_css_path + '/' + '*.css',
           clean_js_path + '/' + '*.js'
       ]);
    });
    
    
    //合并登陆页所需css
    gulp.task('merge-login-css', ['clean-css'], function () {
        return gulp.src([
            'jquery-ui-1.10.3.custom.min.css',
            'entypo.css',
            'bootstrap.css',
    
            'neon-core.css',
            'neon-theme.css',
            'neon-forms.css',
            'custom.css'
        ].map(function (path) {
            return clean_css_path + '/' + path;
        })).pipe(concatCss('login.min.css'), {basedir: target_css_path})
            .pipe(cleanCSS())
            .pipe(gulp.dest(target_css_path))
    });
    
    //合并登陆页所需js
    gulp.task('merge-login-js', ['clean-js'], function () {
        return gulp.src([
            'jquery-1.11.3.min.js',
            'TweenMax.min.js',
            'jquery-ui-1.10.3.minimal.min.js',
    
            'bootstrap.js',
            'joinable.js',
            'resizeable.js',
            'neon-api.js',
    
            'jquery.validate.min.js',
            'neon-login.js',
            'neon-custom.js',
            'neon-demo.js'
        ].map(function (path) {
            return clean_js_path + '/' + path
        }))
            .pipe(concat('login.min.js', {basedir: target_js_path}))
            .pipe(gulp.dest(target_js_path));
    });
    
    //登录页面的css、js和base的不一样, 独立生成, 先清除缓存文件
    //一般不需要更改
    gulp.task('login', ['merge-login-css', 'merge-login-js']);
    
    
    //如果只是改变自定义的css、js, 只压缩自定义的css、js
    //前提是之前已经压缩过其他文件, 并且没有删除
    //压缩自定义css
    gulp.task('clean-custom-css', function () {
        return gulp.src('public/admin/css/neon_common.css')
            .pipe(cleanCSS())
            .pipe(gulp.dest(clean_css_path));
    });
    //压缩自定义js
    gulp.task('clean-custom-js', function () {
        return gulp.src([
            'public/admin/js/common.js',
            'public/admin/js/kollway_ot.js'
        ]).pipe(uglify()).pipe(gulp.dest(clean_js_path));
    });
    
    //如果之前已经用过gulp生成所有中间压缩文件
    //修改了自定义的几个文件之后可以直接使用gulp custom利用缓存文件生成新的压缩文件
    gulp.task('cache-clean-css', ['clean-custom-css'], clean_css_callback);
    gulp.task('cache-clean-js', ['clean-custom-js'], clean_js_callback);
    gulp.task('custom', ['cache-clean-css', 'cache-clean-js']);
    
    gulp.task('default', ['css', 'js']);
  • 相关阅读:
    boltdb 学习和实践
    解读-m addrtype --dst-type LOCAL -j DOCKER
    找到linux中当前java的安装位置
    java.library.path是什么?
    Linux 中【./】和【/】和【.】之间有什么区别?
    [SpringMVC]JSON乱码问题
    iOS MVVM的理解与分析
    iOS中为什么必须在主线程操作UI
    几种直播流媒体协议
    IOS硬编码
  • 原文地址:https://www.cnblogs.com/eleven24/p/6232611.html
Copyright © 2020-2023  润新知