Rails 5 - Как включить все активы вендора в конвейер активов? - PullRequest
1 голос
/ 04 июля 2019

Я нашел несколько разных тем по включению ресурсов в каталог 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, но это не помогло.

Как я могу включить все активы вендора в конвейер активов?

UPDATE

Я получил JavaScript моего поставщика для загрузки, добавив следующее к app/assets/javascripts/application.js:

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

Однако я использую Sass и до сих пор не могу загрузить файлы SCSS.

1 Ответ

2 голосов
/ 04 июля 2019

Я наконец понял это после того, как вспомнил, что пути загрузки ресурсов 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/.

Это автоматически добавит в мое приложение все файлы JavaScript, которые я поместил в vendor/assets/javascripts.

Для Sass я добавил следующее к app/assets/stylesheets/application.sass:

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

Я добавил этодо @import "*";, поэтому предпочтение будет отдано стилям моего приложения.Это будет включать в себя все файлы Sass от поставщика с моим приложением.Затем я переименовал все файлы .css моего поставщика, чтобы использовать расширение .scss.

Теперь, когда разработка работает нормально, я беспокоился о предварительной компиляции.Я управлял rails assets:precompile локально, и, конечно же, все активы моего поставщика были включены!

...