bundle install 和gem install有什麼差別?
可想而知一定要有差別才寫這篇,如果我直接寫下:沒有差別,等等就被拖出去打了(?)
bundle install也是要先從gem install bunder才能拿來用,如果這世界上沒有gem install幫我們下載gem也是不行的。
那為什麼就靠gem install幫我們下載檔案就好拉?何須多此一舉多個bundle取代gem?
bundle是什麼?他是管理應用程式 Gem 依存性(dependencies)管理工具,它會根據 Gemfile 的設定自動下載及安裝 Gem 套件,並且幫你解決不同套件之間的依存關係,更重要的是,它可以讓不同開發者之間和佈署時,所有依存套件的版本都能夠一致。(取自:https://ihower.tw/rails/environments-and-bundler.html)
白話文如下:
我們使用的軟體有很多不同的版本,ruby 也有很多不同的版本; rails 也有很多不同的版本,這些不同的版本之間光是套件就有不同的差異,雖然一樣是install 一個套件進來用,但是你不會知道套件跟套件之間,哪些會衝突、哪些會相容,如果只是貿然下載一個不知道的套件,也許他的4.0可以相容,但是 3.0 會讓原本專案中的其他套件失效需要有其他的輔助套件一起下載使用,那你使用 gem install 就會GG。
我個人覺得,bundle install在本質上跟gem install是一樣的,但是bundle又多了一套防線,它會多產生一個 gemfile lock 檔,這樣無論誰下載這個專案下來,都知道要去哪裡找哪個版本的套件,避免套件跟套件間的衝突,所以我們也要認真在裝套件時加上版號(?)
所以當我們想要在專案加上一個新的套件來幫我們工作時,需要的流程如下:
- 先去 https://rubygems.org/?locale=zh-TW 找想要使用的套件
- 找到後右邊複製gemfiles那格的資料
- 在專案的gemfile找一個好地方放它(例如:開發時才會用就放在group :development do 下方)
- 在終端機下 $bundle install 的指令
- 快樂地使用它。
總而言之,如果gem install之後,再使用bundle install會是比較保險的做法,不然直接使用bundle install也可以,但是電腦還是很善良的,大部分的時候就算噴錯也是會建議你該怎麼做,並不會放讓你在原地倉皇失措,但如果因為忘記做bundle而導致整個專案壞掉,就得不償失了,你說是吧?