2012-07-10 65 views

回答

5

短:你不能。

在预编译的Rails穿过的application.js文件,合并所有进口到一个,这样只是改变一个文件仅仅是不可能的,因为在那里继续压缩。做快速修复时,在开发过程中预编译:(它不会做任何不application.js中引用的文件)

下一个:你不应该运行耙资产。只有在部署时(取决于你的耐心),任务运行5分钟应该没问题。

在开发过程中,您应该使用开发环境,因为Rails将提供未合并和未精简的资产,因此不需要进行资产预编译。 如果您正在运行通过rails s这在Web服务器Rails的建立应该是默认的,但你可以使用显式启动Rails服务器:

rails s RAILS_ENV=development

资产如果仍然无法正常显示或看到错误请确保您有config.assets.debug = true

+0

如何避免需要运行rake资产:预编译? – Paul 2012-07-10 14:26:22

5

@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在支持预编译的方式上很灵活;仅预编译更改的资产是可能的。我听到了一些很好的反馈,但没有自己使用它。

+0

谢谢,这解决了我的问题与RefineryCMS不使用application.js。 http://stackoverflow.com/q/24023256/148844 – Chloe 2014-06-03 23:01:05

3

@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" %> 
+0

如何使用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

12

如果你想预编译只有一个文件,你可以做一个自定义的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文件。

+0

我得到未初始化的常量Uglifier – bjm88 2016-03-25 14:07:32

+0

您需要安装gem,然后在您的rake文件中需要它以便使用Uglifier库。 – 2016-03-25 18:44:27

2

你可以完全不用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将连接所需的文件。