我可以针对特定的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