config.assets.precompile未添加vendor/gem资产

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   )

但是这并没有任何影响。有什么建议吗?

1个回答

18

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

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 资产组织


1
这非常有帮助。虽然时间很长,但我认为这个答案应该被标记为“已接受”。 - sargas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接