2017-04-12 33 views
2

新的Rails讓我忍無可忍......今天我在研究資產管道時正在查看清單文件(application.js),並且很好奇如何讀取//= require jquery等指令。這是什麼Sprockets在背景中做的?怎麼樣?爲什麼必須先將該指令註釋掉,並添加等號?如果我取消註釋指令並在我的瀏覽器中加載application.js文件,我不再看到jQuery庫的內容。只是好奇這是如何在後臺工作。另外,當我添加自己的自定義css樣式表時,是否在application.css清單文件中添加require指令,還是添加樣式錶鏈接,如<link rel="stylesheet" type="text/css" href="mystyle.css">?或者我都這樣做?我假設我不應該直接在清單文件中添加css ...在使用Rails時,Sprockets指令是如何在清單文件中讀取的?

謝謝!

回答

1

不知道你知道多少,所以會試着詳細解釋。

Rails將我們的資源(如圖像,css,js文件)存儲在不同的地方,所以它的一切都爲了我們 - 開發人員使用。這就是所謂的Assed Pipeline。當Rails加載這些資產,比如說css文件時,它會從我們所有的應用程序文件中創建一個大文件,以避免多次調用。 Manifest就像是Rails的地圖或規則,這些文件包含在那個大的css文件中,而這正是告訴Rails究竟包含什麼(我認爲它是Rails語法)。所以,當你有這樣的事情:

//= require jquery 
//= require jquery_ujs 
//= require turbolinks 
//= require_tree . 

require_tree .告訴Rails從JavaScript的文件夾搶的所有文件,而//= require jquery和其他指導的Rails 特殊情況 - 資產,通常是由你的寶石使用(這些文件你永遠不要保存在你的javascript/stylesheets文件夾中,所以//= require_tree .不能看到它們)。

當你添加你的css文件時,你只需將它添加到樣式表文件夾中,require_tree通知Rails將它包含在大圖中。但Rails有一個很好的功能 - 腳手架。你用命令rails g scaffold User命令你的對象,Rails爲你創建了一切 - 視圖,控制器,模型,測試(以及誰知道還有什麼:))。因此,在這種情況下,你甚至都不需要建立你的CSS文件,只需插入CSS規則把它和Rails會發現它因require_tree .

有點不同的故事與上海社會科學院文件:

如果你想要使用多個Sass文件,您通常應該使用Sass @import規則而不是這些Sprockets指令。當使用 鏈輪指令,存在薩斯文件自己的範圍之內,使得 變量或混入只有他們在被定義 文檔中可用。

所以,如果你要使用引導(可能會),這是重要的是要知道。

希望這有助於

+0

@JD,謝謝你的回答和關於Sass的提示,否則不會知道! –

+0

@克萊格內斯,謝謝!這真是一件愉快的事情:) –

1

如何?爲什麼必須先將指令註釋掉

因爲這是sprockets指令。它在該文件中的任何js /咖啡有機會運行之前執行完畢。而且CSS根本不是「可運行」的代碼。你如何讓這種代碼不會產生任何錯誤?你評論它。

...等號加了嗎?

告訴這些特殊指令除了其他的「常規」註釋外,可能在該文件中。

我假設我不應該在清單文件裏面直接添加CSS ...

爲什麼不,請便。儘管出於代碼組織的原因,您可能想將任何自定義代碼放在單獨的文件中。但從技術上講,這裏沒有問題。

而且,當我添加自己的自定義CSS樣式表,做我在application.css清單文件

無需添加需要的指令,require_tree .會發現,包括您的文件。

還是我添加樣式錶鏈接,如<link rel="stylesheet"type="text/css" href="mystyle.css">

不,不要那樣做。

+0

好評如潮......悲傷無法自己實現...... –

+0

謝謝@SergioTulentsev!這絕對有助於解決問題 –

相關問題