我可以針對特定的JavaScript文件運行rake assets:precompile
嗎?rake資產:針對特定JS文件的預編譯
否則全部預編譯持續5分鐘,使得JavaScript文件的快速變化很煩人。
我可以針對特定的JavaScript文件運行rake assets:precompile
嗎?rake資產:針對特定JS文件的預編譯
否則全部預編譯持續5分鐘,使得JavaScript文件的快速變化很煩人。
短:你不能。
在預編譯的Rails穿過的application.js文件,合併所有進口到一個,這樣只是改變一個文件僅僅是不可能的,因爲在那裏繼續壓縮。做快速修復時,在開發過程中預編譯:(它不會做任何不application.js中引用的文件)
下一個:你不應該運行耙資產。只有在部署時(取決於你的耐心),任務運行5分鐘應該沒問題。
在開發過程中,您應該使用開發環境,因爲Rails將提供未合併和未精簡的資產,因此不需要進行資產預編譯。 如果您正在運行通過rails s
這在Web服務器Rails的建立應該是默認的,但你可以使用顯式啓動Rails服務器:
rails s RAILS_ENV=development
資產如果仍然無法正常顯示或看到錯誤請確保您有config.assets.debug = true
@Tigraine是部分正確。 Rails 3.1+資產旨在由Rails完全管理,默認爲所有資產將被編譯爲一個js和一個css資產。
無論其...
編譯到一個單一的資產依賴於使用由所述鏈輪寶石處理的資產清單(的application.js和application.css)的。默認情況下,這些清單包含一個require_tree指令,它是包含所有文件的指令。如果您刪除該指令,則需要做更多工作才能編譯您的資產。
如果你想建立獨立的資產,你可以設置在application.rb中配置選項。
config.assets.precompile += %w(additional/asset.css funky/stuff.js)
上述線將所述文件附加/ asset.css和時髦/ stuff.js添加到當資產被預編譯,將產生的文件的列表(請注意,「+ =」是被用來擴展默認列表)。爲了儘可能的明確,這意味着你將有四個資源預編譯:application.js,funky/stuff.js,application.css和additional/asset.css。
這就是說,你可能想看看the guard-rails-assets寶石。該gem在支持預編譯的方式上很靈活;僅預編譯更改的資產是可能的。我聽到了一些很好的反饋,但沒有自己使用它。
謝謝,這解決了我的問題與RefineryCMS不使用application.js。 http://stackoverflow.com/q/24023256/148844 – Chloe 2014-06-03 23:01:05
@Tigraine是不正確的。
有可能,您只需創建文件夾並將css文件放入其中,並將其導入資產文件夾中的不同文件即可。
像
application.css
*= require_self
*= require foundation_and_overrides
*= require reset
*= require_tree ./screen
使得畫面是我放在樣式表文件夾內的文件夾。像assets/stylesheets/screen/
。我打電話跟
<%= stylesheet_link_tag "application", media: "screen, projection" %>
的application.css現在,如果你想創建爲您創造另一個佈局一個CSS文件,根據assets/stylesheets
像xxx.css
如果您需要多個文件爲XXX你按照上述相同的步驟,但這裏的重要組成部分,是你這行添加到
production.rb
config.assets.precompile += %w(xxx.css)
然後裏面的佈置添加:
<%= stylesheet_link_tag "xxx", media: "screen, projection" %>
如何使用config.assets.precompile如果你有scss參與。也是需要的文件夾路徑,它在哪裏看?我們有一個特定於電子郵件的css,我們希望不將其包含在application.css中,因爲它的樣式僅適用於所有電子郵件。我們在〜/ app/assets/stylesheets /文件夾中有一個email.css.scss,使用Rails 3.2和assets pipeline。我們有生產的預編譯和cdn設置。我嘗試添加這一行,但它沒有工作,沒有編譯電子郵件。此外,似乎capistrano只在web機器上進行資產編譯,但電子郵件在延遲的作業工作器上運行... – bjm88 2016-03-25 14:01:47
如果你想預編譯只有一個文件,你可以做一個自定義的rake任務這樣做很容易。
namespace :assets do
desc "compile one js file"
task :compile_one_file => :environment do
dest = "#{Rails.root}/vendor/assets/javascripts/compiled/"
js_asset = "your_jsfile.js"
File.write(dest + js_asset, Uglifier.compile(Rails.application.assets.find_asset(js_asset).to_s))
end
end
然後在命令行
rake assets:compile_one_file
希望這會有所幫助,我覺得這是非常有用的,我不經常改變,如jQuery和jQuery插件廠商js文件。這種方式時,即時通訊開發中,它加快了我的頁面加載,保持資產管道不必爲我的供應商文件路由所有單獨的請求。它只是提供了我所有供應商js的一個縮小的js文件。
我得到未初始化的常量Uglifier – bjm88 2016-03-25 14:07:32
您需要安裝gem,然後在您的rake文件中需要它以便使用Uglifier庫。 – 2016-03-25 18:44:27
你可以完全不用Rails。這可以使事情運行得更快,具體取決於您的環境。
quick_compile.rb
require 'sprockets'
sprocket = Sprockets::Environment.new
sprocket.js_compressor = :uglifier # or read off config yml
sprocket.append_path('app/assets/javascripts') # the directory that holds you js src.
file = File.new('test_min.js','w+') # the output file path.
file.puts(sprocket.find_asset('test.js')) # the file to complie
file.close
如果你只是想evalute的// = require語句,你可以刪除js_compressor設置。 Sprocket將連接所需的文件。
如何避免需要運行rake資產:預編譯? – Paul 2012-07-10 14:26:22