条件要求链轮(Conditional require in Sprockets)

2019-08-02 05:12发布

我怎样才能有条件使用链轮要求资产?

我用Google搜索的解决方案前问,发现在链轮库讨论- 条件要求

该解决方案所讨论的有使用ERB:

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

我试着这样说:

app.js.erb

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

Rake文件

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和就不能发现它。

Answer 1:

也许,因为您的示例使用调试作为参数,你可以使用满足于有在开发环境中的资产?

如果是这样,在配置/环境/ development.rb

config.assets.precompile << 'lib-debug.js'


Answer 2:

一种可能的解决方案是添加以下到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


文章来源: Conditional require in Sprockets