繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM