一文搞清rake、Rakefile、gem、gemspec、bundler、bundle、Gemfile的關係
- 2020 年 3 月 10 日
- 筆記
概述
這幾個都是Ruby語言中的概念。下面我分別介紹一下各個名詞的含義,並將其與其他類似工具做比較,以便讀者理解。
Ruby
Ruby
是紅寶石的意思,是程式語言的名字。Ruby
語言的logo就是一顆紅寶石。
Ruby
是一門開源的動態程式語言,注重簡潔和效率。其句法優雅,讀起來自然,寫起來舒適。
Ruby
語言源文件的後綴是.rb
。
rake和Rakefile
rake
是Ruby
語言的類make
程式。可以在其中定義任務和源碼依賴。
rake = r(uby』s m)ake
就像make
有Makefile
文件一樣,rake
有對應的Rakefile
。
它們都屬於構建工具的範疇。
表格展示如下:
語言 |
構建工具名稱 |
構建工具配置文件 |
---|---|---|
C |
Make |
Makefile |
Ruby |
Rake |
Rakefile |
gem和gemspec
gem
是寶石的意思。能夠很容易想到跟Ruby
紅寶石同處一系。
gem
是Ruby
的包管理系統,命令是gem
,包名後綴也是.gem
,類似於rpm
。
不過rpm
只能安裝本地包,不能聯網下載。聯網下載需使用yum
或dnf
。
同樣的,Debian系,包管理系統是dpkg
,不能聯網下載。聯網下載需使用apt
。
gemspec文件,是gem的描述文件,包含gem相關的資訊,如包名、版本、簡介、描述、作者、主頁等。
類似的,dpkg打包需要spec文件,deb打包需要control文件。
表格展示如下:
語言 |
包管理系統 |
包後綴 |
本地 |
聯網 |
描述文件名 |
---|---|---|---|---|---|
Ruby |
gem |
.gem |
✅ |
✅ |
<package-name>.gemspec |
Red Hat系 |
rpm |
.rpm |
✅ |
❌ |
SPECS/<package-name>.spec |
Red Hat系 |
yum/dnf |
.rpm |
❌ |
✅ |
– |
Debian系 |
dpkg |
.deb |
✅ |
❌ |
debian/control |
Debian系 |
apt |
.deb |
❌ |
✅ |
– |
這裡要注意,gem對應的文件是gemspec。Gemfile和gem無關,它其實是bundler的配置文件名稱。
bundler、bundle和Gemfile
bundler
是Ruby應用的外部依賴管理工具。
bundle
是另一個gem,是用來解決」把bundler誤拼寫稱bundle」的問題,唯一功能就是安裝bundler,使兩者同意而不報錯。
Gemfile
文件描述執行相關Ruby應用需要的外部依賴gem,包含源、gem名稱、gem版本等資訊。
執行bundler install
時,bundler
會讀取Gemfile
文件並一次性安裝所有依賴gem。
總結
rake是Ruby語言的構建工具,它的配置文件是Rakefile。
gem是Ruby語言的包管理工具,它的配置文件後綴是.gemspec。
bundler是Ruby語言的外部依賴管理工具,它有一個別名叫」bundle」,它的配置文件是Gemfile。