如何利用Grunt生成對應的Source Map文件,線上代碼壓縮使用

如何利用Grunt生成對應的Source Map文件,線上代碼壓縮使用chrome瀏覽器便於調式javascript

    首先咱們來講說爲什麼要生成sourceMap文件呢?簡單的說,sourceMap是爲了壓縮後的代碼調式提供方便,好比線上的JS文件已經壓縮了,可是線上好比說有bug,可是代碼已是壓縮後的,對於開發並很差調式,因此想生存一個對應的Map文件,而後使用chrome瀏覽器在源文件未壓縮的JS文件下調式。html

  那麼Map文件究竟是什麼呢?簡單的來說它就是記錄信息,記錄一些爲壓縮以前的js文件的位置,及壓縮後的文件對應未壓縮以前的文件,對應第幾行第幾列的那些代碼!前端

  在講解使用grunt生存Map文件以前,咱們仍是來簡單複習下grunt如何合併及壓縮代碼,對於grunt咱們並不陌生,以前有幾篇文章咱們也講過如何使用grunt 可是咱們這邊仍是一步一步先來說解下grunt合併,壓縮及生成Map文件,及在chrome瀏覽器下如何調式代碼的整個過程吧,也更使初學者更容易理解及掌握!java

  Grunt是一套前端自動化工具,基於nodeJS基礎之上,對於咱們前端通常用於如下幾點:node

  1. 壓縮JS或者CSS文件。chrome

  2. 合併JS或者CSS文件。npm

1:Grunt是基於nodeJS,因此未安裝nodeJS,先須要安裝nodeJS。json

     1.下載安裝文件:下載地址:http://www.nodejs.org/download/以下:數組

      

根據操做系統的多少位 下載那個版本。下載完成後,雙擊:瀏覽器

執行相應的安裝,完成後,在終端命令下,作以下操做:

Node 和 npm的版本號,說明都已經安裝成功了(注:新版本的node安裝文件已經包含了npm,因此如今只須要安裝這個node版本的文件就ok)。

2. Grunt安裝:客戶端安裝命令npm install -g grunt-cli (全局安裝)

如上:安裝已完成!

Demo實列以下:

假若有以下這麼一個項目文件,以下:

 一:如何壓縮文件?(主要使用插件grunt-contrib-uglify)

     1.package.json文件

      若是項目根目錄沒有package.json文件,咱們能夠建立一個(或者使用命令 npm init),在這裏咱們手動建立一個。這個文件主要用來存儲npm模塊的依賴項,以下          

      package.json代碼以下:

{   "name": "demo",   "version": "0.1.0",   "description": "demo",   "license": "MIT",   "devDependencies": {     "grunt": "~0.4.1",     "grunt-contrib-jshint": "~0.6.3",     "grunt-contrib-uglify": " ~0.5.1",     "grunt-contrib-clean": "~0.5.0"   } }

接着咱們進入根目錄直接運行npm install就能提取依賴項。

以下已經生成了文件:

Gruntfile.js

  若是項目的根目錄沒有Gruntfile.js,咱們能夠手動建立一個,它通常作如下事情。

  1. 讀取package.json信息。

  2. 插件加載、註冊任務,運行任務.

Gruntfile.js信息以下

module.exports = function (grunt) {        // 項目配置         grunt.initConfig({            pkg: grunt.file.readJSON('package.json'),            uglify: {                build: {                   src: 'src/*.js',                   dest: 'dest/dest.min.js'               }           }     });       // 加載提供"uglify"任務的插件       grunt.loadNpmTasks('grunt-contrib-uglify');      // 默認任務       grunt.registerTask('default', ['uglify']); }

上面的含義是指:把全部src下面的js文件壓縮到dest文件下的dest.min.js文件。

在根目錄下運行grunt 就能夠生成,以下:

二:如何對文件合併?

仍是以上面的項目文件爲例,在package.json增長一項 "grunt-contrib-concat": "~0.3.0"

 便可,而後在項目根目錄再運行 npm install 以下:

便可把合併插件(grunt-contrib-concat)添加進來。以下:

接着咱們能夠在Gruntfile.js增長concat任務配置,這邊爲了綜合演示合併及壓縮,因此一塊兒先合併,再壓縮了。代碼以下:
module.exports = function (grunt) {   // 項目配置   grunt.initConfig({     pkg: grunt.file.readJSON('package.json'),      concat: {       options: {         separator: ';'       },       dist: {         src: 'src/*.js',         dest: 'dest/dest.js'       }     },      uglify: {       build: {         src: 'dest/dest.js',         dest: 'dest/dest.min.js'       }     }   });   // 加載提供"uglify"任務的插件   grunt.loadNpmTasks('grunt-contrib-uglify');   grunt.loadNpmTasks('grunt-contrib-concat');   // 默認任務   grunt.registerTask('default', ['concat', 'uglify']); }
上面代碼的含義是:先合併src目錄下全部的文件到dest目錄下的dest.js裏面去,接着對dest.js文件進行壓縮,生成dest.min.js文件,以下所示:

三:壓縮src下的全部JS到dest目錄下生成,能夠以下配置:

module.exports = function (grunt) {   grunt.initConfig({     uglify: {       my_target: {         files: [{           expand: true,           cwd: 'src',           src: '*.js',           dest: 'dest'         }]       }     }   });   grunt.loadNpmTasks('grunt-contrib-uglify');   // 默認任務    grunt.registerTask('default', ['uglify']); }

執行grunt,便可生成以下:

上面的意思是指把src全部的js,在dest目錄下生成且壓縮。

以上是基本知識點,好了,下面咱們來回到主題,壓縮JS後,如何來生成對應的map文件。

仍是我以前的項目gruntTest。

Package.json仍是以前同樣的,以下代碼:

{   "name": "demo",   "version": "0.1.0",   "description": "demo",   "license": "MIT",   "devDependencies": {     "grunt": "~0.4.1",     "grunt-contrib-jshint": "~0.6.3",     "grunt-contrib-uglify": "~0.5.1",     "grunt-contrib-concat": "~0.3.0",     "grunt-contrib-clean": "~0.5.0"   } }

下面咱們只要在Gruntfile.js配置成以下便可。

module.exports = function (grunt) {     // 構建任務配置      grunt.initConfig({         //讀取package.json的內容,造成json數據          pkg: grunt.file.readJSON('package.json'),      // 對build目錄進行清理          clean: {             build: {                 src: 'dest/*'          }         },      // 合併全部的JS       concat:{          dist: {              src: 'src/*.js',              dest: 'dest/dest.js'          }      },      // 壓縮全部js並生成source map          uglify: {             "my_target": {                 options: {                     sourceMap: true                 },                 files: [                     // 能夠直接做用於文件夾下全部文件                      {                         expand: true,                         cwd: 'dest/',                         src: ['dest.js'],                         // 輸出和輸入在同一目錄                          dest: 'dest/',                         ext: '.min.js'                     }                 ]             }         }     });     // 加載指定插件任務      grunt.loadNpmTasks('grunt-contrib-uglify');    grunt.loadNpmTasks('grunt-contrib-clean');    grunt.loadNpmTasks('grunt-contrib-concat');     // 默認執行的任務      grunt.registerTask('default', ['clean','concat','uglify']); };

上面的代碼的意思是:對src下的全部JS文件 先合併後 在dest目錄下生成dest.js的合併文件,接着對dest.js文件在同一目錄下壓縮生成dest.min.js,同時生成map文件dest.min.js.map。以下所示:

在chrome瀏覽器下如何設置調式?

  首先咱們來看看對chrome不設置狀況下 是這樣的 ,在Setting -> General ->

如上,沒有勾選Enable javascript source maps選項,咱們在chrome瀏覽器下 按F12看到這樣的:

文件已經壓縮了的,對於咱們調式JS很是不方便,因此咱們須要對chrome瀏覽器設置下,勾選上Enable javascript source maps文件,以下所示:

咱們再來看下chrome瀏覽器,以下:

若是dest.js代碼有問題的話,咱們能夠直接對未壓縮的dest.js進行調式代碼。

咱們打開map文件 看到以下信息:

{     "version": 3,     "file": "dest.min.js",     sourceRoot:'',     "sources": [         "dest.js"     ],     "names": [         "Test1",         "test1",         "init",         "console",         "log",         "Test2",         "test2"     ],     "mappings": "AAKC,QAASA,SACT,GAAIC,IACHC,KAAM,WACLC,QAAQC,IAAI,UAGd,OAAOH,GAGR,QAASI,SACR,GAAIC,IACHJ,KAAM,WACLC,QAAQC,IAAI,UAGd,OAAOE" }

- version:Source map的版本,目前爲3。 - file:轉換後的文件名。 - sourceRoot:轉換前的文件所在的目錄。若是與轉換前的文件在同一目錄,該項爲空。 - sources:轉換前的文件。該項是一個數組,表示可能存在多個文件合併。 - names:轉換前的全部變量名和屬性名。 - mappings:記錄位置信息的字符串.

相關文章
相關標籤/搜索