簡體   English   中英

Bundler如何工作?

[英]How does bundler work?

這個問題是關於bundler,rubygems以及它如何確定我調用的方法。 它很長,所以請耐心等待。

根據我的理解,Bundler是一個用於管理ruby的gem的依賴管理工具。 它安裝Gemfile列出的所有gem及其依賴Gemfile

我想問的問題可以用一個例子來說明。 所以這里 - >在我的rails應用程序中,我在我的控制器中執行此操作: -

module SurveyorControllerCustomMethods
  def create
    super
  end
end
class SurveyorController < ApplicationController
   include Surveyor::SurveyorControllerMethods
end

在這里,我做兩件事:

  1. 包括SurveyorControllerMethods從測量師的寶石。
  2. 正如我在這里使用super ,它會從SurveyorControllerMethods調用create方法,它工作正常,但我不明白。

寶石安裝在

$ bundle show surveyor
/home/gaurish/.rvm/gems/ruby-1.9.3-p194/gems/surveyor-0.22.0

令人驚訝的是,它不存在於ruby的$LOAD_PATH 所以問題是:

  1. 它是如何工作的?
  2. 使用bundler安裝gem,在安裝過程中幕后會發生什么?
  3. 有一些gems ex jquery-rails ,我們甚至不必在我們的代碼中包含/調用它們,但是,jQuery JavaScript文件會自動包含在內。 我知道它不是魔術,所以它是如何工作的?

它們的關鍵在於如何開箱即用Rails。 這也是Rails開始大型項目的原因之一。[1]

在boot.rb中你會發現:

require 'bunder/setup'

在application.rb的頂部你會發現:

Bundler.require(:default, :development)

最后一個方法調用回溯到您的Gemfile,然后迭代給定組中的所有 gem( :default:development上面的:development )。 然后它確定應該加載的默認文件是什么,通常是gem名稱,但也可以通過:require選項指定。 Bundler也有一些內置的命名約定異常,例如處理“ - ”而不是“_”。

Bundler然后只加載gem的主文件,然后(通常)加載gem內的文件。

'bundler/setup'文件執行Bundler.setup ,它負責加載路徑。 它為每個gem的$LOAD_PATH (取消)。 關於那些加載路徑應該是什么的實際信息來自rubygems。

看看來源:

https://github.com/carlhuda/bundler/blob/master/lib/bundler/setup.rb https://github.com/carlhuda/bundler/blob/master/lib/bundler/runtime.rb

[1]:當你啟動一個新的Rails項目時,你可能會發現如果刪除Bundler.require行並且只需要寶石,它就不會那么慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM