[英]rake assets:precompile for specific JS file
我可以运行rake assets:precompile
特定的JavaScript文件吗?
否则,完整的预编译将持续5分钟,并且快速更改JavaScript文件非常烦人。
如果您只想预编译一个文件,则可以使自定义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
希望这有帮助,我发现这对我不经常更改的供应商js文件很有用,例如jquery和jquery插件。 这样,当我开发时,它加快了我的页面加载,使资产管道不必为我的供应商文件路由所有单独的请求。 它只提供我所有供应商js的一个缩小的js文件。
简短:你做不到。
在预编译期间,Rails会遍历Application.js文件并将所有导入合并为一个,因此只是更改一个文件是不可能的,因为在那里进行了压缩。 (它对未从application.js引用的文件没有任何作用)
接下来:您不应该运行rake资产:在进行快速修复时在开发期间进行预编译。 只有部署在哪里(取决于你的耐心),任务运行5分钟应该没问题。
您应该在开发期间使用开发环境,其中不需要资产预编译,因为Rails将为未绑定和未缩小的资产提供服务。 如果您通过rails s
运行Web服务器中的Rails构建,则默认情况下这应该是,但您可以使用以下命令显式启动rails服务器:
rails s RAILS_ENV=development
如果资产仍未正确显示或您看到错误,请确保您具有config.assets.debug = true
@Tigraine部分正确。 Rails 3.1+资产旨在由Rails完全管理, 默认情况下,所有资产将被编译为一个js和一个css资产。
然而...
编译为单个资产依赖于使用由Sprockets gem处理的资产清单(application.js和application.css)。 默认情况下,这些清单包括require_tree指令,它是包含所有文件的指令。 如果删除该指令,则需要做更多的工作来编译资产。
如果要构建单独的资产,可以在application.rb中设置配置选项。
config.assets.precompile += %w( additional/asset.css funky/stuff.js )
上面的行会将文件additional / asset.css和funky / stuff.js添加到资源预编译时生成的文件列表中(请注意,'+ ='用于扩展默认列表)。 为了尽可能明确,这意味着您将预编译四个资产:application.js,funky / stuff.js,application.css和additional / asset.css。
也就是说,你可能想看看guard-rails-assets gem。 宝石在支持预编译方面具有灵活性; 只能预编译已更改的资产。 我听说过一些很好的反馈,但我自己没有用过。
@Tigraine不正确。
有可能,您只需要创建文件夹并将css文件放入其中并将其导入assets文件夹中的不同文件。
喜欢
application.css
*= require_self
*= require foundation_and_overrides
*= require reset
*= require_tree ./screen
屏幕是我放在样式表文件夹中的文件夹。 像assets/stylesheets/screen/
。 我用application.css调用
<%= stylesheet_link_tag "application", media: "screen, projection" %>
现在,如果要为另一个布局创建单个css文件,请在assets/stylesheets
下创建该文件
像xxx.css
如果你需要xxx的多个文件,你可以按照上面的步骤进行操作,但这里重要的部分是你要添加这一行
production.rb
config.assets.precompile += %w( xxx.css )
然后在你添加的布局内:
<%= stylesheet_link_tag "xxx", media: "screen, projection" %>
没有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
如果您只想评估// = require语句,则可以删除js_compressor设置。 Sprocket将连接所需的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.