js壓縮 uglify

來源:互聯網
上載者:User

標籤:register   cti   hello   git   class   ann   lda   mod   log   

grunt-contrib-uglify

uglify是一個檔案壓縮外掛程式,項目地址:https://github.com/gruntjs/grunt-contrib-uglify

本文將以一個DEMO來展示如何使用uglify外掛程式。

DEMO環境

package.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檔案結構:

 

其中js檔案夾就是用來測試的,Gruntfile.js稍後介紹,其中a.js內容如下:

(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);})();

下面我們來配置四個任務:

  • 壓縮a.js,不混淆變數名,保留注釋,添加banner和footer
  • 壓縮b.js,輸出壓縮資訊
  • 按原檔案結構壓縮js檔案夾內所有JS檔案
  • 合并壓縮a.js和b.js
Gruntfile.js

現在直接通過Gruntfile.js來看看這四個任務的配置:

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 gruntvar 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)}();

js壓縮 uglify

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.