Rails 5 - 如何将所有供应商资产包含在资产管道中?
Rails 5 - How to include all vendor assets in the asset pipeline?
我发现了几个关于在 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 文件。
我记得 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 与我的其余资产一起预编译。
然后,我在 //= require_tree .
上面的 app/assets/javascripts/application.js
中添加了以下行:
//= 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
在本地,果然,我所有的供应商资产都包括在内!
我发现了几个关于在 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 文件。
我记得 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 与我的其余资产一起预编译。
然后,我在 //= require_tree .
上面的 app/assets/javascripts/application.js
中添加了以下行:
//= require_tree ../../../vendor/assets/javascripts/.
这会自动将我放入 vendor/assets/javascripts
.
对于 Sass,我将以下内容添加到 app/assets/stylesheets/application.sass
:
@import "../../../vendor/assets/stylesheets/*";
我在 @import "*";
之前添加了这一行,以便优先使用我自己的应用程序的样式。这将包括我的应用程序中的所有供应商 Sass 文件。然后我重命名了所有供应商 .css
文件以使用 .scss
扩展名。
现在开发工作正常,我担心预编译。我 运行 rails assets:precompile
在本地,果然,我所有的供应商资产都包括在内!