grunt 相关知识

/**
 * Created by lee on 2014.07.02 002.
 */
module.exports = function (grunt) {

    // 项目配置
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'//添加banner
            },
            //任务一:压缩a.js,不混淆变量名,保留注释,添加banner和footer
            builda: {
                options: {
                    mangle: false, //不混淆变量名
                    preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释)
                    footer: '\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer
                },
                files: {
                    'output/js/a.min.js': ['js/a.js']
                }
            },
            //任务二:压缩b.js,输出压缩信息
            buildb: {
                options: {
                    report: "min"//输出压缩率,可选的值有 false(不输出信息),gzip
                },
                files: {
                    'output/js/b.min.js': ['js/main/b.js']
                }
            },
            //任务三:按原文件结构压缩js文件夹内所有JS文件
            buildall: {
                files: [
                    {
                        expand: true,
                        cwd: 'js',//js目录下
                        src: '**/*.js',//所有js文件
                        dest: 'output/js'//输出到此目录下
                    }
                ]
            },
            //任务四:合并压缩a.js和b.js
            release: {
                files: {
                    'output/js/index.min.js': ['js/a.js', 'js/main/b.js']
                }
            }
        },
        filerev: {
            dist: {
                src: [
                    '<%= pkg.dist %>/scripts/{,*/}*.js',
                    '<%= pkg.dist %>/styles/{,*/}*.css',
                    '<%= pkg.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
                    '<%= pkg.dist %>/styles/fonts/*'
                ]
            }
        },
        copy: {
            dist: {
                files: [
                    {
                        expand: true,
                        dot: true,
                        cwd: '<%= pkg.app %>',
                        dest: '<%= pkg.dist %>',
                        src: [
                            '*.{ico,png,txt}',
                            '.htaccess',
                            '*.html',
                            'views/{,*/}*.html',
                            'images/{,*/}*.{webp}',
                            'fonts/*'
                        ]
                    }
                ]
            },
            styles: {
                expand: true,
                cwd: '<%= pkg.app %>/styles',
                dest: '<%= pkg.dist %>/styles',
                src: '{,*/}*.css'
            },
            script: {
                expand: true,
                cwd: '<%= pkg.app %>/scripts',
                dest: '<%= pkg.dist %>/scripts',
                src: '{,*/}*.js'
            }
        },
        useminPrepare: {
            html: '<%= pkg.app %>/index.html',
            options: {
                dest: '<%= pkg.dist %>',
                flow: {
                    html: {
                        steps: {
                            js: ['concat', 'uglifyjs']
                        },
                        post: {}
                    }
                }
            }
        },

        // Performs rewrites based on filerev and the useminPrepare configuration
        usemin: {
            html: ['<%= pkg.dist %>/{,*/}*.html'],
            css: ['<%= pkg.dist %>/styles/{,*/}*.css'],
            options: {
                assetsDirs: ['<%= pkg.dist %>','<%= pkg.dist %>/images']
            }
        }
    });

    // 加载提供任务的插件
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-filerev');
    grunt.loadNpmTasks('grunt-usemin');

    // 默认任务
    grunt.registerTask('default', ['uglify:release']);
    grunt.registerTask('mina', ['uglify:builda']);
    grunt.registerTask('minb', ['uglify:buildb']);
    grunt.registerTask('minall', ['uglify:buildall']);
    grunt.registerTask('build', ['uglify:buildall']);
}

 

 

这里主要使用的是  grunt-contrib-uglify  使用了文件压缩和文件合并;

pkg: grunt.file.readJSON('package.json'),

读取packages.json 文件里面的信息.

配置任务,使用uglify在里面配置任务 如上文件的 builda,buildb,buildall;

对于每个任务可配置的: 详细阅读 github uglify  doc 

  demotask:{
                options: {
            report: "min",//输出压缩率,可选的值有 false(不输出信息),gzip mangle: false, //是否混淆变量名 默认false 添加 except: ['jQuery', 'Backbone'] 例外 ;不要混淆替换jQuery 和Backbone //对压缩方式控制 去掉 console.* 方法 compress: { drop_console: true }, preserveComments: 'all', //不删除注释,还可以为 false(删除全部注释),some(保留@preserve @license @cc_on等注释) footer:'\n/*! <%= pkg.name %> 最后修改于: <%= grunt.template.today("yyyy-mm-dd") %> */'//添加footer }, files: [{ expand:true, cwd:'js',//js目录下 src:'**/*.js',//所有js文件 dest: 'output/js'//输出到此目录下 }] }

 

posted @ 2014-06-30 11:10  在那花开时节  阅读(373)  评论(0编辑  收藏  举报