2015年12月9日 星期三

[開發].NET 套件管理 - Nuget


導言


我們在開發的過程中,難以避免需要引用第三方的套件。
軟體界常常聽到的一句話「不要重複打造輪子」,
不過你要去哪裡找這些輪子、引撆或是方向盤呢?
就是車子為例,假設你要組裝一台汽車,
套件管理工具就像是個代理商,
進口了各式各樣的套件讓你組裝的你夢想中的車子。
(當然你也可以自已成為代理商--**建立自已的Nuget Server**)
你可以找到各式各樣的套件,包含不同的版本,
「哇!!這可以找到1946的法拉利車胎!!!!」。

微軟提供了相當方便的套件管理工具「Nuget」,
像是RubyGems或是NodejsNpm
不同的語言有不同的套件管理工具。

透過Nuget你可以下載所需要的套件,
就好像你打了一通電話給代理商,
他就把你需要的零件通通都寄過來了。
(現在可以打造你自已獨一無二的車子了)

在這裡我要暫停一下,
或許該提一下**版本控制**。但是我不要!!!
想像一下,你手工打造了一台夢幻跑車
「1946年的法拉利車胎 ,2015年福特底盤再加上1985年麥加倫的車頭燈....」(噗!!)
Cool ! 你肯定有一筆長長的「清單」,
你可能還會在fb打卡分享,然後馬克祖克柏(?)還會要求你教他怎麼DIY組出這台車。
該怎麼作? 如果真的有人也想打造一台一模一樣的車子,
我想你不可能會把這些零件通通寄給馬克祖克柏,運費、時間成本太不符合效益了
別忘了,我們可是有一個超級代理商 「Nuget 」!
我們只需要把「清單 」寄給馬克就好了!
馬克可以直接從超級代理商 「Nuget 」拿到他所需要零件。

實務

實務上,當專案進行到一定程度,
一定會引入相當的第三方套件,
對C#來說,他只是個「.DLL」的二進位檔,
對我們來說他並沒有什麼版本控制的意義,
因為我們不會也沒有必要修改他。
(其他語言來說,如nodejs是js檔,雖然是文字檔,
但是以組件的角度來說,也是沒有修改的意義)
我們所需要的只有「組件名稱」以及「組件版號」,
當別人要透過版本控制取得你的程式碼的時候,傳輸檔案的量就會有明顯的差異了
一包組件可以大到幾百MB,而一份清單只需要幾KB,
節省下來的時間,都可以讓你作個伸展操了。
另外,你也可以透過版本控制查詢過往組件的汰換記錄,
這在實務上查找問題是非常有幫助的。

--
來看看實際操作
以Visual Studio 2013為例,
對著方案檔按右鍵選取「Enable NuGet Package Restore」
完成以後,會在方專底下新增一個.nuget資料夾,
並且有著以下幾個檔案,
「NuGet.Config」
「NuGet.exe」
「NuGet.targets」
畫面如下:
大多數的時候,我們只需要專注在專案的開發,
而不需要來看「.nuget 」資料夾,
唯一需要的情況是引用的套件,
引用套件的步驟可以參考黑大的「還在揮汗徒手安裝程式庫? 試試NuGet吧
如果安裝成功,就會在你的專案產生一份
packages.config檔與packages資料夾。

packages.config就是清單,packages資料夾裡面放的就是你的零組件。
我們沒有必要傳遞零組件「packages 」資料夾,
只需要傳遞這份清單「packages.config 」,
簽入你的版本控制吧 !!
簽入你的版本控制吧 !!
簽入你的版本控制吧 !!
很重要,所以說三次。

小結

這樣一來,任何與你共同開發專案的人員,
都可以拿到同一份組件清單,
而且大家都可以跟超級供應商取得正確版本的組件。

又是美好的一天,Good Luck !!!

[[[本誌僅為個人分享與記錄,不保証內容永久正確性,如有謬誤、疏漏或侵權還請留言告知]]]

沒有留言:

張貼留言