如何自己動手編譯自定義版本的最新jQuery類庫?

日期:2012-9-21  來源:GBin1.com

如何自己動手編譯自定義版本的最新jQuery類庫?

你是不是覺得jQuery類庫不夠靈活,不像其它的框架或者類庫,例如,dojo那樣一樣可以動態的加載模塊,或者你在你的項目中沒有使用jQuery提供的所有功能,比如,不需要AJAX相關功能,只需要DOM相關的操作功能。 那么能不能給我們的jQuery減減肥呢?在今天的這篇文章中,我們將介紹如何使用一些編譯工具來創建我們自己的jQuery類庫。

編譯需要的工具

在我們編譯前,我們需要準備3個編譯工具:

  • git 1.7或者更新:用來克隆抓取jQuery代碼庫
  • npm:這個在我們以前的node.js入門中介紹過,如果你安裝了node.js就包含了這個工具
  • grunt:一個基于任務的命令行javascript編譯工具

安裝并且編譯

首先請下載git和npm,我們使用的是windows環境,下載并安裝git和node.js。如下:

下載git并安裝:

如何自己動手編譯自定義版本的最新jQuery類庫?

下載node.js并安裝:

如何自己動手編譯自定義版本的最新jQuery類庫?

注意這里我們使用npm來安裝grunt。

取得jQuery代碼并編譯

首先打開Git Bash,如果你安裝好了git,可以在開始菜單找到快捷方式,運行命令如下:

git clone git://github.com/jquery/jquery.git

你將看到正在抓取jquery的相關文件。如下圖:

如何自己動手編譯自定義版本的最新jQuery類庫?

完成后,我們將在本機用戶的個人目錄中找到目錄jquery。這是jquery工程文件目錄。

接下來,進入jquery目錄并且運行npm:

cd jquery && npm install 

如何自己動手編譯自定義版本的最新jQuery類庫?

確認你安裝了grunt,輸入如下命令:

grunt -version

如何自己動手編譯自定義版本的最新jQuery類庫?

最后,使用grunt編譯,如下:

grunt

你將能夠在dist目錄下看到你編譯的jQuery

注意:如果你遇到錯誤如下:

如何自己動手編譯自定義版本的最新jQuery類庫?

原因是沒有將子模塊抽取出來,請使用如下方式來解決:

git submodule update --init

如何自己動手編譯自定義版本的最新jQuery類庫?

再次運行grunt,則可以看到如下輸出:

如何自己動手編譯自定義版本的最新jQuery類庫?

大家可以看到我們在dist目錄下生成了3個版本的jquery.js

編譯自定義版本的jQuery

下面我們將編譯自定義版本的jQuery,在制作產品級別的jQuery類庫之前,請確認最新穩定版,如下:

git pull; git checkout $(git describe --abbrev=0 --tags)

然后確認所有的node依賴包還有所有的Git子模塊都已經check out。

npm install && grunt

現在我們開始編譯自定義版本,例如,我們不需要AJAX功能,則運行如下命令行:

grunt custom:-ajax

不需要css:

grunt custom:-css

不需要deprecated:

grunt custom:-deprecated

不需要dimensions:

grunt custom:-dimensions

不需要effects:

grunt custom:-effects

不需要offset:

grunt custom:-offset

不需要所有的可選模塊:

grunt custom:-offsetgrunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-offset

注意所有的依賴都被編譯內部處理。你不用擔心。

最后,運行Unit測試用例,保證代碼正確。

cd jquery && grunt watch

這樣你去dist查看一下jQuery類庫的代碼行數,可以看到文件更小了。

更多編譯信息,請查看jQuery的github地址: https://github.com/jquery/jquery

希望大家喜歡這篇文章,如果你有任何問題,請在我們的文章中留言,謝謝閱讀!

來源:如何自己動手編譯自定義版本的最新jQuery類庫?

 本文由用戶 jjfat 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!