rake assets:特定JS文件的预编译

Pau*_*aul 14 ruby-on-rails asset-pipeline

我可以运行rake assets:precompile特定的JavaScript文件吗?

否则,完整的预编译将持续5分钟,并且快速更改JavaScript文件非常烦人.

Dav*_*row 13

如果您只想预编译一个文件,则可以使自定义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
Run Code Online (Sandbox Code Playgroud)

然后从命令行

rake assets:compile_one_file
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,我发现这对我不经常更改的供应商js文件很有用,例如jquery和jquery插件.这样,当我开发时,它加快了我的页面加载,使资产管道不必为我的供应商文件路由所有单独的请求.它只提供我所有供应商js的一个缩小的js文件.


Tig*_*ine 5

简短:你做不到.

在预编译期间,Rails会遍历Application.js文件并将所有导入合并为一个,因此只是更改一个文件是不可能的,因为在那里进行了压缩.(它对未从application.js引用的文件没有任何作用)

接下来:您不应该运行rake资产:在进行快速修复时在开发期间进行预编译.只有部署在哪里(取决于你的耐心),任务运行5分钟应该没问题.

您应该在开发期间使用开发环境,其中不需要资产预编译,因为Rails将为未绑定和未缩小的资产提供服务.如果您在Web服务器中运行Rails构建,则rails s默认情况下应该是这样,但您可以使用以下命令显式启动rails服务器:

rails s RAILS_ENV=development

如果资产仍未正确显示,或者您发现错误,请确保您有 config.assets.debug = true


And*_*dyV 5

@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 )
Run Code Online (Sandbox Code Playgroud)

上面的行会将文件additional/asset.css和funky/stuff.js添加到资源预编译时生成的文件列表中(请注意,'+ ='用于扩展默认列表).为了尽可能明确,这意味着您将预编译四个资产:application.js,funky/stuff.js,application.css和additional/asset.css.

也就是说,你可能想看看guard-rails-assets gem.宝石在支持预编译方面具有灵活性; 只能预编译已更改的资产.我听说过一些很好的反馈,但我自己没有用过.