3

如何使用 Sprockets 有条件地要求资产?

我在询问之前搜索了解决方案,并在 Sprockets 存储库中找到了这个讨论 -有条件的要求

那里讨论的解决方案是使用 ERB:

<% require_asset "#{ActiveScaffold.js_framework}/my_test" %>

我试过这样:

应用程序.js.erb

<% if debug == true %>
   <% require_asset "lib-debug" %>
<% else %>
   <% require_asset "lib-min" %>
<%end%>

耙文件

def bundle_app(debug)
  env = Sprockets::Environment.new
  env.append_path "app/"
  env.js_compressor = Uglifier.new
  assets = env.find_asset("app.js.erb")
  return assets.to_s
end

但这会导致以下错误:

#<#:0x00000001576d30> 的未定义局部变量或方法“调试”

肯定有一些易于修复的错误,但我是 Ruby 新手,无法发现它。

4

2 回答 2

1

一种可能的解决方案是将以下内容添加到 bundle_app 方法中:

env.context_class.class_eval "def debug; #{!!debug}; end"

更新后的 bundle_app() 方法:

def bundle_app(debug)
  env = Sprockets::Environment.new
  env.append_path "app/"
  env.context_class.class_eval "def debug; #{!!debug}; end"
  env.js_compressor = Uglifier.new
  assets = env.find_asset("app.js.erb")
  return assets.to_s
end
于 2012-11-01T16:32:44.050 回答
1

也许,由于您的示例使用调试作为参数,您可以使用结算来在开发环境中拥有资产?

如果是这样,在 config/environments/development.rb

config.assets.precompile << 'lib-debug.js'
于 2012-11-02T03:18:26.273 回答