2016-11-05 42 views
0

我是rails新手,對於資產的加載方式我有點困惑。我可以讓事情有效,但我想了解幕後真正發生的事情。Rails資產使用說明

我一直在閱讀文檔,但有些內容我完全不理解。

清單文件

,混淆我是清單文件使用的第一件事。

舉例來說,如果在我的應用程序/資產/ Java腳本/ application.js中的文件,我有:

//= require_tree . 

Rails文檔說:

告訴鏈輪遞歸包括在 所有JavaScript文件指定目錄輸入到輸出中

什麼是不清楚的是哪個目錄?應用程序/資產/ JavaScript的/?

這是否意味着如果我在app/assets/javascripts /中添加文件,它將被加載並提供服務?

如果我再補充一點需要補充,我需要添加到清單文件的文件example.js寶石:

//= require example.js 

但如果//= require_tree已經加載並服務於應用程序/資產的文件,爲什麼這是必要的/ javascripts /這是我把我的example.js的位置?好吧,允許我指定順序,如果以後我添加更多需求。但除此之外呢?

HTML文件

然後腳本被列入application.html.erb

<%= javascript_include_tag ('application'), 'data-turbolinks-track' => true %> 

我明白這上面加載,因此在其中的各種//= require提到的application.js文件。

有時會發生需要腳本的特定文件:

<script src="js/example.js"></script> 

是這種情況不會<script src="js/example.js"></script>做的//= require example.js同樣的事情?

PUBLIC VS APP資產

我明白,如果我把我的example.js公共文件/文件夾的資產就不會被編譯,而是單獨提供。我爲什麼要這麼做?如果在連接和編譯文件時沒有正確地提供文件,並且僅在分離服務時才能正常工作,是否合理?換句話說,如果我在app/assest中包含一個.js文件,並且它有加載或破壞的問題,是否值得嘗試從那裏刪除它並將它移動到公共/資產,或者這樣做沒有意義嗎?

APP資產VS賣方資產

在這情況下,我應該添加一個文件到供應商的資產,而不是應用程序的資產?將它添加到某個地方或另一個地方有什麼區別? 而在我的供應商/ assets/javascripts中,我只有一個空的.keep文件。所以,應用程序/資產上的清單文件就是如此。這個文件夾中的文件如何引用呢?

回答

1

對於採用路徑參數的指令,可以指定 邏輯路徑或相對路徑。相對路徑以./和 相對於當前文件位置的引用文件開頭。

所以//= require_tree .告訴鏈輪加載任何文件app/assets/javascripts/,並將它們連接成的application.js。

是這種情況不會<script src="js/example.js"></script> 做的// =需要example.js同樣的事情?

編號Rails將資產作爲獨立文件在開發中,以便在發生錯誤時獲得有意義的行號和文件引用。

在生產過程中,它將連接並縮小對性能重要的資產。

鏈輪不會檢查腳本標記的視圖/佈局。所以前者會導致兩個請求。

我明白,如果我把對公共/資產我example.js文件夾 它不會被編譯,而是單獨提供。我爲什麼要做 ?

公共目錄位於服務器Web根目錄下。由於這些文件沒有太多的干預,所以它是一個很好的地方,例如錯誤頁面,或者需要靜態名稱而沒有緩存破解指紋的資產。

我應該在哪種情況下向供應商資產添加文件而不是應用 資產?將它添加到某個地方或 另一個有什麼區別?

/vendor/assets是放置不是由您創建或不屬於應用程序的資產的地方。兩者都被添加到鏈輪負載路徑中,所以結果是相同的。它只是一個代碼組織的問題。