Rails 5-如何在资产管道中包含所有供应商资产?

时间:2019-07-04 19:43:30

标签: ruby-on-rails ruby-on-rails-5 asset-pipeline vendor

我在vendor/assets目录中找到了包括资产在内的几个不同的线程,但是没有找到适合我的东西。以前,我将所有供应商资产都放在app/目录中,但是将JavaScript移到了vendor/assets/javascripts/目录中,并将CSS移到了vendor/assets/stylesheets/目录中。

我现在正试图在开发和生产中加载我的供应商资产,而这些资产根本没有加载。这是我的assets.rb文件:

# Be sure to restart your server when you modify this file.

# Version of your assets, change this if you want to expire all your assets.
Rails.application.config.assets.version = '1.0'

# Add additional assets to the asset load path
# Rails.application.config.assets.paths << Emoji.images_path

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile += [
  Rails.root.join('vendor/assets/javascripts/*').to_s,
  Rails.root.join('vendor/assets/stylesheets/*').to_s
]

我还尝试将vendor/assets/目录添加到Rails.application.config.assets.paths,但这没有帮助。

如何在资产管道中包括所有供应商资产?

更新

我通过将以下内容添加到app/assets/javascripts/application.js中来加载我的供应商JavaScript:

//= require_tree ../../../vendor/assets/javascripts/.

但是,我正在使用Sass,但仍然无法加载SCSS文件。

1 个答案:

答案 0 :(得分:2)

在记住Rails资产加载路径和Sprockets是不同的系统之后,我终于弄清楚了。这是我所做的:

config/initializes/assets.rb中,我添加了以下几行:

# Add additional assets to the asset load path
Rails.application.config.assets.paths += [
  Rails.root.join('vendor', 'assets').to_s
]

# Precompile additional assets.
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
Rails.application.config.assets.precompile += [
  Rails.root.join('vendor/assets/javascripts/*').to_s,
  Rails.root.join('vendor/assets/stylesheets/*').to_s
]

第一块将供应商资产添加到Rails资产路径。这使我可以在视图助手中使用供应商资产(例如:image_tag)。第二个块允许我的供应商JavaScript和CSS与我的其余资产进行预编译。

然后,将以下行添加到app/assets/javascripts/application.js上方的//= require_tree .

//= require_tree ../../../vendor/assets/javascripts/.

这会将我放入vendor/assets/javascripts的所有JavaScript文件自动添加到我的应用程序中。

对于Sass,我在app/assets/stylesheets/application.sass中添加了以下内容:

@import "../../../vendor/assets/stylesheets/*";

我在@import "*";之前添加了这一行,以便优先使用我自己的应用程序的样式。这将包括我的应用程序中的所有供应商Sass文件。然后,我将所有供应商的.css文件重命名为使用.scss扩展名。

现在开发工作正常,我担心预编译。我在本地运行rails assets:precompile,而且可以肯定的是,我所有的供应商资产都包括在内!