我可以运行rake assets:precompile
特定的 JavaScript 文件吗?
否则,完整的预编译会持续 5 分钟,并且会使 JavaScript 文件的快速更改非常烦人。
我可以运行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 assets:precompile。仅在部署时(取决于您的耐心),让任务运行 5 分钟应该没问题。
您应该在开发期间使用不需要预编译资产的开发环境,因为 Rails 将为未合并和未缩小的资产提供服务。如果您在 web-server 中运行 Rails 构建,rails s
这应该是默认设置,但您可以使用以下命令显式启动 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 和附加/asset.css。
就是说,您可能想查看guard-rails-assets gem。gem 支持预编译的方式很灵活;仅预编译更改的资产是可能的。我听说过一些关于它的好反馈,但我自己没有使用它。
@Tigraine 不正确。
有可能,您只需创建文件夹并将 css 文件放入其中,然后将其导入 assets 文件夹中的不同文件。
像
application.css
*= require_self
*= require foundation_and_overrides
*= require reset
*= require_tree ./screen
其中 Screen 是我放置在样式表文件夹中的文件夹。喜欢assets/stylesheets/screen/
。我调用 application.css
<%= stylesheet_link_tag "application", media: "screen, projection" %>
现在,如果你想为另一个布局创建一个 css 文件,你可以在下面创建它assets/stylesheets
喜欢 xxx.css
如果您需要xxx的多个文件,请按照与上述相同的步骤进行操作,但这里重要的部分是您将此行添加到
生产.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 将连接所需的文件。