grunt 使用比較

http://www.cnblogs.com/yexiaochai/p/3603389.htmlhtml

最全的uglify使用DEMO

http://www.cnblogs.com/artwl/p/3449303.htmlnode

grunt-contrib-uglify

uglify是一個文件壓縮插件,項目地址:https://github.com/gruntjs/grunt-contrib-uglifygit

本文將以一個DEMO來展現如何使用uglify插件。github

DEMO環境

package.json:json

{
  "name": "grunt-demo",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-nodeunit": "~0.2.0",
    "grunt-contrib-uglify": "~0.2.2"
  }
}

DEMO文件結構:grunt

 

其中js文件夾就是用來測試的,Gruntfile.js稍後介紹,其中a.js內容以下:post

(function() {
    //output hello grunt
    var helloGrunt = "Hello Grunt!(From a.js)";
    console.log(helloGrunt);
})();

b.js內容以下:測試

(function() {
    //output hello world
    var helloWorld = "Hello World!(From b.js)";
    console.log(helloWorld);
})();

下面咱們來配置四個任務:ui

  • 壓縮a.js,不混淆變量名,保留註釋,添加banner和footer
  • 壓縮b.js,輸出壓縮信息
  • 按原文件結構壓縮js文件夾內全部JS文件
  • 合併壓縮a.js和b.js

Gruntfile.js

如今直接經過Gruntfile.js來看看這四個任務的配置:url

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
            },
            builda: {//任務一:壓縮a.js,不混淆變量名,保留註釋,添加banner和footer
                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']
                }
            },
            buildb:{//任務二:壓縮b.js,輸出壓縮信息
                options: {
                    report: "min"//輸出壓縮率,可選的值有 false(不輸出信息),gzip
                },
                files: {
                    'output/js/b.min.js': ['js/main/b.js']
                }
            },
            buildall: {//任務三:按原文件結構壓縮js文件夾內全部JS文件
                files: [{
                    expand:true,
                    cwd:'js',//js目錄下
                    src:'**/*.js',//全部js文件
                    dest: 'output/js'//輸出到此目錄下
                }]
            },
            release: {//任務四:合併壓縮a.js和b.js
                files: {
                    'output/js/index.min.js': ['js/a.js', 'js/main/b.js']
                }
            }
        }
    });

    // 加載提供"uglify"任務的插件
    grunt.loadNpmTasks('grunt-contrib-uglify');

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

經過上面的代碼,咱們很容易就能夠看到上面四個任務的配置方式。

運行結果

任務一:壓縮a.js,不混淆變量名,保留註釋,添加banner和footer

運行 grunt mina 命令,生成的a.min.js以下:

/*! grunt-demo 2013-11-29 */
!function(){//output hello grunt
var helloGrunt="Hello Grunt!(From a.js)";console.log(helloGrunt)}();
/*! grunt-demo 最後修改於: 2013-11-29 */

跟咱們的目標一致。

任務二:壓縮b.js,輸出壓縮信息

運行 grunt minb 命令,生成的b.min.js以下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello World!(From b.js)";console.log(a)}();

命令執行狀況:

咱們能夠看到輸出了壓縮信息

任務三:按原文件結構壓縮js文件夾內全部JS文件

運行 grunt minall 命令,生成目錄結構以下:

其中a.min.js和b.min.js是任務一和任務二生成的,壓縮後的output/js/a.js內容以下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello Grunt!(From a.js)";console.log(a)}();

output/js/main/b.js內容以下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello World!(From b.js)";console.log(a)}();

任務四:合併壓縮a.js和b.js

運行 grunt命令,生成的output/index.min.js內容以下:

/*! grunt-demo 2013-11-29 */
!function(){var a="Hello Grunt!(From a.js)";console.log(a)}(),function(){var a="Hello World!(From b.js)";console.log(a)}();
相關文章
相關標籤/搜索