1. 程式人生 > >grunt使用小記之uglify:最全的uglify使用DEMO

grunt使用小記之uglify:最全的uglify使用DEMO

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

至此,本節uglify外掛的介紹就結束了,對本文或使用過程中有任何問題,歡迎留言討論。

相關推薦

grunt使用小記uglifyuglify使用DEMO

grunt-contrib-uglify 本文將以一個DEMO來展示如何使用uglify外掛。 DEMO環境 package.json: { "name": "grunt-demo", "version": "0.1.0", "devDependencies": {

f2fs系列 的SSA 總結

point hot block arm 問題: parent 自身 問題 個數 理解SSA的難點在於 SSA如何避免對SIT/NAT區域零星的寫。這需要深入理解SSA 自身和相關的數據結構和協作關系。 data/node 根據數據冷熱分區 分區的數據以log/journal

Faster-RCNN講解

答主能力有限,寫不出這麼好的文章,通俗易懂還把細節都描述了,所以不要臉的轉載了,這篇文章真的寫的很好,小白應該也能看懂~~~~ 轉自: https://zhuanlan.zhihu.com/p/31426458 經過R-CNN和Fast RCNN的積澱,Ross B. Gir

從0開始認識android(二十二)notification詳解

這裡涉及到的是v4支援包中的通知API,因為這些API能將一些比較新的特性相容到4.0版本的裝置,所以,我們第一步要做的是為專案新增v4包依賴: implementation 'com.android.support:support-compat:26.0.0'

Java史上的微信支付+退款實戰。

廢話不多說直接上程式碼: 呼叫類: public class WeixinPayClient{        Logger log = Logger.getLogger(WeixinPayClient.class);   private st

轉載先進的檢測演算法對比Faster R-CNN, R-FCN, SSD, FPN, RetinaNet and YOLOv3

很難衡量一個檢測演算法的好壞,因為除了演算法本身的思路之外,還有許多因素影響它的速度和精度,比如: 特徵提取網路(VGG, ResNet, Inception, MobileNet); 輸出的步長,越大分類數目越多,相應的速度也會受影響; IOU的評判方式;

棧工程師路---2018web開發路線圖

前後端都需要掌握的技能 Git — You should’ve learned Git yesterday, 15 minutes to learn Git SSH HTTP / HTTPS Terminal Usage — Basic Mac

Android面的 Webview 詳解

前言 現在很多App裡都內建了Web網頁(Hyprid App),比如說很多電商平臺,淘寶、京東、聚划算等等,如下圖 那麼這種該如何實現呢?其實這是Android裡一個叫WebView的元件實現的。今天我將全面介紹WebView的常用用法。

2018年Spring Boot 2.0深度實踐核心技術篇

第1章 系列總覽 總覽 Spring Boot 2.0 深度實踐系列課程的整體議程,包括 Spring Boot 三大核心特性(元件自動裝配、嵌入式Web容&#64056;、生產準備特性)、Web 應用(傳統 Servlet、Spring Web MVC、Spring WebFlux)

WebRTC學習簡單的語音聊天

VoiceEngine中與最簡單語音聊天相關的標頭檔案有五個,如下表所示: 標頭檔案 包含的類 說明 voe_base.h VoiceEngineObserver VoiceEngine VoEBase 1.預設使用G.711通過RTP進行全雙工的VoI

Android史上簡單有用的第三方開源庫收集整理

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會 不定期的更新 這篇文章。 Android下的優秀開發庫數不勝數,在本文中,我列舉的多是

【開源框架】Android史上簡單有用的第三方開源庫收集整理,有助於快速開發,歡迎各位網友補充完善

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會 不定期的更新 這篇文章。 Android下的優秀

經驗有效的iOS記憶體洩漏檢測

使用instruments工具來更好的除錯我們的工程中新開發或者修改過的模組的記憶體狀況。 iOS裝置效能越來越好,iOS App 也相應的變得越來越龐大,App程式碼的量級也在快速的增長,開發一個小的模組在工程中除錯變的越來越難,通常我們是通過觀察Allocat

[轉]【開源框架】Android史上簡單有用的第三方開源庫收集整理,有助於快速開發

原文地址:http://www.tuicool.com/articles/jyA3MrU Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言 。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫

【開源框架】Android史上簡單有用的第三方開源庫收集整理

Android開源庫 自己一直很喜歡Android開發,就如部落格簽名一樣, 我是程式猿,我為自己代言。 在摸索過程中,GitHub上搜集了很多很棒的Android第三方庫,推薦給在苦苦尋找的開發者,而且我會不定期的更新這篇文章。 Android下的優秀開發庫數不

Android面的Socket使用解析

前言 Socket的使用在Android的網路程式設計中非常重要今天我將帶大家全面瞭解Socket及其使用方法 目錄 1.網路基礎 1.1 計算機網路分層 計算機網路分為五層:物理層、資料鏈路層、網路層、運輸層、應用層 其中: 網路層:負責根據IP找到目的地址的主機運輸層:通過埠把資料傳到目的主機的目

python如何學習學習路線

目標 功能 如何 python 相關操作 python學習 飛機 思想 靜態方法 最近開始整理python的資料,博主建立了一個qq群,希望給大家提供一個交流的同平臺 78486745 。 Python語法簡單,功能強大,越來越多的功能庫,已經有越來越多的企業使用py

Hexo+NexT(零)Hexo+Next搭建部落格教程

快速、簡潔且高效的部落格框架 有位大神說,喜歡寫部落格的人的人,折騰部落格會經歷三個階段。找到一個免費空間,搭建一個部落格,很欣喜,很有成就感,此為一階段;受限免費空間各種限制,自己買空間和域名,實現對部落格的完全控制,此為二階段;管理網站太累,只想安安靜靜碼文字,管理網站這種瑣事,交給專業的人士去打理吧

【Github教程】史上github使用方法github入門到精通

GitHub已經成為的一切開放原始碼軟體的基石。開發人員喜歡它,基於它進行協作,並不斷通過它開發令人驚歎的專案。除了​​程式碼託管,GitHub的主要吸引力是使用它作為一個協作開發工具。在本教程中,讓我們來看看一些最有用的GitHub的功能,特別是使團隊工作更有效率,更高生產力,非常重要的,好玩的那

【Github教程】史上github使用方法github入門到精通

註冊賬戶以及建立倉庫 要想使用github第一步當然是註冊github賬號了, github官網地址:https://github.com/。 之後就可以建立倉庫了(免費使用者只能建公共倉庫),Create a New Repository,填好名稱後Create,之後會出現一些倉庫的配置資訊,這