13

我无法将供应商化的资产编译为根文件。

我想让以下资产独立可用(不与其他资产打包_:

vendor/gems/neo-viz/app/assets/stylesheets/neo-viz.css.scss
vendor/gems/neo-viz/app/assets/javascripts/neo-viz.js.coffee
vendor/gems/neo-viz/app/assets/javascripts/lib/jQuery/jquery-1.6.1.min.js
vendor/gems/neo-viz/app/assets/javascripts/lib/arbor/arbor.js

使用以下行:

config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css )

只有 css 文件被预编译并可用。为什么?

另外,在看到这个问题(在 Rails 中使用 config.assets.precompile 包括子目录中的资产)后,我尝试了:

config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css lib/arbor/arbor.js arbor/arbor.js lib/jQuery/jquery-1.6.1.min.js jQuery/jquery-1.6.1.min.js   )

但这并没有什么不同。想法?

4

1 回答 1

18

默认情况下,Rails 只查看 3 个位置app/assetslib/assetsvendor/assets. Sprockets 在子目录中寻找 JS 资产javascripts。例如

app/assets/javascripts/arbor.js
lib/assets/javascripts/arbor.js
vendor/assets/javascripts/arbor.js

如果你想查看 Rails 在哪里寻找你可以在控制台中使用它:Rails.application.config.assets.paths

您可以做的是将您的自定义路径添加到管道:

 # @file: config/application.rb
 config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts")

然后创建一个清单,其中包含您的 JS 文件:

# @file: /vendor/gems/neo-viz/app/assets/javascripts/neo-viz.js
//= require lib/jQuery/jquery-1.6.1.min
//= require lib/arbor/arbor
//= require neo-viz

最后添加您的清单:

config.assets.precompile += %w( neo-viz.js )'

如果您仍然想单独添加它们,我没有看到这一点,为什么不将它们包含在清单中,那么您必须添加所有可能的路径前缀,以便 Rails 知道在哪里查找:

 # @file: config/application.rb
 config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "stylesheets")
 config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts")
 config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts", "lib", "jQuery")
 config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts", "lib", "arbor")

然后你可以像这样添加它们,因为清单之外的资产必须添加到预编译数组中:

config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css )

资料来源:2.1 资产组织

于 2012-06-27T17:13:30.583 回答