Grunt + Bower—前端構建利器

? 目前比較流行的WEB開發的趨勢是前后端分離。前端采用重量級的Javascript框架,比如Angular,Ember等,后端采用restful API的Web Service服務,通過JSON格式進行數據交互。

? 對于后端服務語言來說,不論是Ruby的rake,Java中的Maven或Gradle,或是Scala中的SBT,他們都能夠提供編譯運行、運行測試、打包部署、依賴管理等功能。再加上強大的package系統,讓它可以插拔式的使用很多強大的功能,像數據遷移工具(liquibase),測試覆蓋率package以及一些代碼樣式檢查的工具。

? 但是對于前段Javascript和CSS而言,很少有工具可以做到前面所述功能的集合。那么我們怎么樣才能達到前面所說的說有功能呢?——Grunt + Bower

? Grunt號稱自己是JavaScript世界的構建工具,它提供了強大的自動化功能。對于需要反復重復的任務,例如壓縮(minification)、編譯、單元測試、linting等,自動化工具可以減輕我們的勞動。Grunt同樣擁有強大的package系統,你所需要的大多數task都已經作為Gruntpackage被開發了出來,并且每天都有更多的package誕生。

? 但這還不夠完美。

? 我們知道,在JavaScript開發當中,我們經常需要引入大量的開源工具。不可避免的會遇到不同版本之間的兼容性問題,例如Bootstrap所依賴的JQuery不是1.10,而是2.03。如果你正在做JS版本升級,那么我想你一定會到各個網站上把他們最新的包下載下來,然后小心翼翼的替換它的版本。但是這些功能在Gradle和其他后端的版本管理工具里已經不再是問題。Bower的出現,完美的解決了這一難題。

??在javascript的世界里,很多東西都是由社區提供的,所以每一種工具都相當獨立。比如,工具都有著自己獨立的配置文件,自己的命令行參數,有時候還需要有一些額外的package把兩個工具結合起來。所以下面將會有很多命令,我們需要一一了解。不過好在我們了解之后,下次就可以使用已經配置好的文件,通過幾條命令將把有的東西都準備好,很方便。

第一步:安裝nodejs

在Mac中,我們可以使用brew來安裝。在其它系統下,請使用相應的工具或直接到官網下載。

brew install node

Nodejs可以讓我們在服務器端使用javascript編程,它是很多js工具的基礎。請確保它是最新的:

brew upgrade node

Npm是node官方提供的包依賴管理工具。我們下面使用的Grunt,Bower等,都是以package形式下載安裝的。當我們安裝好nodejs后,?npm?就自動可用了。查看版本:

npm -v

接下來新建一個目錄grunt_bower,然后運行npm init,根據提示,最后會產生一個package.json如下:

{"name": "grunt_bower","version": "1.0.0","description": "This is for grunt and bower","main": "index.js",  "repository": {"type": "git","url": "https://github.com/yeahyangliu/grunt_bower.git"}
}

第二步:安裝Grunt

你需要先將Grunt命令行(CLI)安裝到全局環境中。安裝時可能需要使用sudo:

npm install -g grunt-cli

上述命令執行完后,grunt?命令就被加入到你的系統路徑中了,以后就可以在任何目錄下執行此命令了。

注意,安裝grunt-cli并不等于安裝了 Grunt!Grunt CLI的任務很簡單:調用與Gruntfile在同一目錄中 Grunt。這樣帶來的好處是,允許你在同一個系統上同時安裝多個版本的 Grunt。

在Grunt項目里一般需要在你的項目中添加兩份文件:package.json?和?Gruntfile。其中package.json中里面已經包含了一些Grunt常用的package,比如?grunt-contrib-jshint?等,我們可根據需要刪減一些用不上的。那么現在我們的文件應該長成這樣:

{"name": "grunt_bower","version": "1.0.0","description": "This is for grunt and bower","main": "index.js","engines": {"node": ">= 0.10.0"},"devDependencies": {"grunt": "~0.4.5","grunt-contrib-jshint": "~0.10.0","grunt-contrib-watch": "~0.6.1","grunt-contrib-qunit": "~0.5.2","grunt-contrib-concat": "~0.4.0","grunt-contrib-uglify": "~0.5.0"}"repository": {"type": "git","url": "https://github.com/yeahyangliu/grunt_bower.git"},"author": "Yang Liu"  
}

下面,我們需要一個gruntfile,gruntfile中定義了package的功能,并且可以自定義一些任務來管理我們Javascript代碼。通過執行下面命令生成一個gruntfile:

npm install grunt-init -g
git clone https://github.com/gruntjs/grunt-init-gruntfile.git ~/.grunt-init/gruntfile
grunt-init gruntfile

接下來只需要把所有package.json中的package通過npm裝在本目錄,我們就可以使用Grunt來幫我們運行,管理我們的Javascript代碼了。

第三步:安裝Bower

Bower跟npm在某種意義上相似,它是用來管理常用的js庫的依賴的,比如jquery, underscore, angularjs等。同樣我們可以通過npm安裝它:

npm install bower -g

同樣,Bower也有自己的配置文件bower.json

{name: 'grunt_bower',version: '0.0.0',authors: ['YANG Liu <yeah_yangliu@163.com>'],license: 'MIT',ignore: ['**/.*','node_modules','bower_components','test','tests']
}

接下來就是我們見證奇跡的時刻:

bower install angularjs --save
bower insall jquery --save

我們就可以看到angular和JQuery已經被下載到本地。同時bower.json中多了兩個依賴:

"dependencies": {  "angularjs": "~1.2.20",  "jquery": "~2.1.1"
}        

而且,我們的目錄里,兩個版本的js文件也被下載到了本地。如果你覺得現在已經大功告成了,那么你就錯了,bower只負責把依賴下載到本地的?bower_components?目錄,并不負責把它們拷貝到我們項目中實際使用的地方,比如?public/js/lib?目錄下。

為了實現這樣的功能,我們還需要另一個package的幫助:

npm install grunt-bower-task --save-dev

然后打開其文檔,按照上面的提示進行配置。首先在?Gruntfile?中合適位置添加:

grunt.loadNpmTasks('grunt-bower-task');

然后在?grunt.initConfig({...})?參數中,添加相應的配置項,把bower下載的js庫拷貝到?public/js/lib?下:

{"bower": {   "install": { "options": {"targetDir": "./public/js/lib","layout": "byComponent","install": true,"verbose": false,"cleanTargetDir": false}}}
}

最后我們只需要運行一行簡單的命令,就可以講grunt和bower完美結合起來:

grunt bower

最后

有了這樣兩大利器,我們已經達到了從管理依賴,編譯部署,壓縮打包,運行測試的所有功能,并且非常清晰的配置,讓項目上的人都擁有同一份配置,這種方式,大大的簡化了團體的管理效率和維護成本,非常值得推崇!

再次感謝大家讀到這里。

?

本文github地址:https://github.com/yeahyangliu/grunt_bower.git

?

轉載于:https://www.cnblogs.com/Alex--Yang/p/4217577.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

apache服務器性能診斷,Apache服務器性能評測

。51Testing軟件測試網m#z"fX}0H:P{(bHP~bd7h5z7I(Sn3H01.比較現有T2000 Apache2.2.8經過優化前后的效果51Testing軟件測試網 R4VsR^4MO!G7fWebserver IP&#xff1a;10.56.234.3151Testing軟件測試網e{]Q/\(p|優化前httpd.conf&#xff1a;da*Z"[d0----------------…

Linux命令行編輯快捷鍵

2019獨角獸企業重金招聘Python工程師標準>>> ctrl ? 撤消前一次輸入 ctrl c 另起一行 ctrl r 輸入單詞搜索歷史命令 ctrl u 刪除光標前面所有字符相當于VIM里d shift^ ctrl k 刪除光標后面所有字符相當于VIM里d shift$ 刪除 ctrl d 刪除光標所在位置上的字符…

kali裝電腦_Kali Linux可以安裝到平板電腦嗎?

在用Windows的電腦上克隆Kali插入U盤.運行Win32 Disk Imager.選擇Kali Linux ISO文件作為被克隆的文件,然后核實要克隆的U盤是否正確.克隆完成后,從Windows機器安全彈出U盤.現在你可以用U盤啟動Kali Linux了.在用Linux的電腦上克隆Kali在Linux環境下制作可啟動的Kali Linux U盤…

思科查看服務器啟動配置文件,啟動配置檢查UCS

本文解釋如何使用UCS將啟動功能和命令迅速執行配置狀態檢查。UCS將啟動功能允許用戶迅速執行一粗略檢查為了保證刀片適當地配置允許BIOS繼續。意志啟動配置檢查是驗證CPU和DIMM配置。此檢查迅速幫助用戶調試啟動問題。思科UCS在意志啟動配置檢查提供幾個工具幫助。這些工具包括…

lnmp下配置虛擬主機

一&#xff1a;首先熟悉幾個命令 which php ---> which是通過 PATH環境變量到該路徑內查找可執行文件&#xff0c;所以基本的功能是尋找可執行文件 whereis php ----> 將和php文件相關的文件都查找出來 service php-fpm/nginx/mysqld restart 重啟服務 二&…

AssetBundle.CreateFromFile的有趣事情

有趣的事情發生了&#xff1a; [MenuItem("AssetBundles/Build AssetBundles")] staticvoid BuildABs () { AssetBundleBuild[] buildMap new AssetBundleBuild[1]; buildMap [0].assetBundleName "test.assetbundle";//打包的資源包名稱 string[] resou…

[cocos2dx筆記010]用于UI的事件管理器

cocos2dx有一個編輯器&#xff1a;cocostudio。眼下來說&#xff0c;已經是比較好用了。僅僅要載入導出的資源。就能夠用上了。省去手動搭建面的麻煩。可是。非常多須要事件的地方&#xff0c;操作比較麻煩&#xff0c;所以這里提供一個事件管理器來集中和簡化管理事件。對于C事…

異形3×3魔方還原教程_【理論篇】三階魔方4.33千億億種變化是怎么計算出來的?...

本篇文章主要介紹三階魔方總狀態數是如何計算出來的&#xff0c;并介紹了兩種算法&#xff0c;盡量保證語言通俗易懂&#xff0c;不涉及高深的理論知識&#xff08;當然我也不懂&#xff1a;P&#xff09;一、4.33千億億到底有多大&#xff1f;我們都知道三階魔方的總變化狀態數…

Jquery 對話框確認

$("#aa").click(function(){if(confirm("是否繼續")){$(#aa).fadeOut(500);} }) 轉載于:https://www.cnblogs.com/chen-lhx/p/5149469.html

datazen Active Directory AD 配置

今天苦心經營的datazen 鏈接AD&#xff0c;文檔已經無法吐槽了簡單的幾句話&#xff0c;根本不夠用。 先說一下鏈接AD 的好處吧&#xff0c; 1 首先免去設置密碼的麻煩&#xff0c;因為直接用AD賬號的密碼。 2 更安全&#xff0c;因為客戶可不想自己的自己的系統&#xff0c;開…

Android CardView卡片布局 標簽: 控件

CardView介紹 CardView是Android 5.0系統引入的控件&#xff0c;相當于FragmentLayout布局控件然后添加圓角及陰影的效果&#xff1b;CardView被包裝為一種布局&#xff0c;并且經常在ListView和RecyclerView的Item布局中&#xff0c;作為一種容器使用。CardView應該被使用在顯…

櫥柜高度與身高對照表_下一套房子裝修,櫥柜就照這樣打,布局尺寸這么詳細,不信不好用...

閑在家的時候&#xff0c;動手給自己做一頓色香味俱全的美食&#xff0c;是一個享受的過程。享受的&#xff0c;不僅僅是味蕾的體驗&#xff0c;擇菜、洗菜、切菜、下鍋...每一個環節都是。不過&#xff0c;這取決于你是否有一個好廚房&#xff1b;而廚房最最最重要的家具&…

DOSbox匯編集成環境下的具體設置

altenter能夠全屏幕&#xff0c;假設認為游戲執行速度不合適&#xff0c;能夠改動 cycles3000 。將3000適當調整大小。 3。執行 DOSBox&#xff0c;會打開兩個 DOS 窗體。我們僅僅需在例如以下窗體中鍵入 mount c h:\pal 此命令的作用為將 h:\pal 掛載為 C 盤&#xff0c;h:\p…

.NET手記-JS獲取Url參數

最近為App做活動專區&#xff0c;其中很多活動都是采用html 5頁面來制作的。一方面體量較小&#xff0c;制作快速&#xff0c;更新維護容易&#xff1b;另一方面&#xff0c;嵌入App后適配效果也不會很差。 這里我們采用混編形式來從native app傳參給web頁面&#xff0c;我們采…

Entity Framework系列之DataBase First

第一步 新建數據庫和表 USE [TestDB] GO /****** Object: Table [dbo].[T_User] Script Date: 01/14/2015 20:27:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[T_User]([Id] [int] IDENTITY(1,1) NOT NULL,[Name] [nvarchar](50) NUL…

axios打包放到服務器上接口地址404_如何把網頁文件放到云虛擬主機

把網頁文件放到云虛擬主機上&#xff0c;可以用虛擬主機控制面板、FTP軟件等方式。我們在運營網站時&#xff0c;經常需要制作一些特殊網頁文件&#xff0c;比如404頁面、sitemap頁面、robots文件等&#xff0c;以及像站長平臺嚴重文件、統計代碼驗證文件等&#xff0c;這些頁面…

cisco數據中心理論小記-3

port channelSTP-防環,非根非指定口block.PCH-帶寬利用率提升&#xff0c;邏輯上單鏈路 l2/l3都可以使用passive -LACP /active-Lacp/ on-Static無協議-on有協商-LACPneuxs 不支持PACPvPC---純二層 技術&#xff0c;沒有三層功能vitrual Port channel解決的是跨框 &#xff0c;…

-----------最小生成樹----------------

最小生成樹(Minimum Spanning Tree) 1:是一棵樹(是一種特殊的圖) 連通的,沒有回路 有V 個頂點 一定有 V-1條邊 2:生成樹 包含了全部的頂點,所有的V-1條邊 都在圖里 剩下的三個土 都是第一個完全圖的生成樹 只要是 4個頂點 3條邊 沒有回路 就是生成樹 這3個圖 隨便的加一…

jQuery Easing 使用方法及其圖解

從jQuery API 文檔中可以知道&#xff0c;jQuery自定義動畫的函數.animate( properties [, duration] [, easing] [, complete] )有四個參數&#xff1a; properties&#xff1a;一組包含作為動畫屬性和終值的樣式屬性和及其值的集合duration(可選)&#xff1a;動畫執行時間&am…

可以進行單元測試么_前端與單元測試

先來幾個專業詞匯&#xff0c;這樣顯得高大上一點&#xff08;不存在的。&#xff09;BDD: Behavior-Driven Development (行為驅動開發)TDD: Test-Driven Development (測試驅動開發)ATDD: Acceptance Test Driven Development(驗收測試驅動開發)好&#xff0c;說完了&#xf…