Как работает требование звездочки?

#ruby-on-rails #sprockets #rails-sprockets #i18n-js

Вопрос:

У меня есть файл под названием application.js в разделе приложения/активы/javascripts

 // = require libs/jquery-retina
// = require libs/jquery.popupoverlay
// = require libs/messg

// = require site_logic/application
// = require serviceworker-companion

// = require i18n
// = require i18n-rules
// = require lazysizes.min
 

i18n на самом деле является драгоценным камнем, который я уже установил, и у меня нет файла i18n в той же папке, что и application.js файл находится внутри, и я уже видел в браузере, что файл был успешно объединен в application.js

Интересно, как это возможно? потому что обычно файл должен находиться в том же каталоге.

Ответ №1:

Звездочки будут просматривать пути , указанные в Rails.application.config.assets.paths разделе, который включает app/assets , lib/assets а vendor/assets также любые пути, добавленные двигателями Rails.

Ресурсы в рамках движка работают так же, как и в полном приложении. Поскольку класс engine наследует от Rails::Engine, приложение будет знать, как искать ресурсы в app/assets каталогах и lib/assets каталогах движка.

Драгоценные камни, которые вы используете, написаны как движки и монтируются, когда это требуется Bundler.require(*Rails.groups) in config/application.rb .

Видеть:

Комментарии:

1. Спасибо за ваш ответ, я использую Rubymine, поэтому, когда я зависаю над i18n в application.js файл он показывает мне, что файл i18n расположен в /home/seifeslimene/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/i18n-js-3.0.0/app/assets/javascripts/i18n.js Но где в коде указано, что от gems может потребоваться любой файл?

2. Прочитайте руководство по двигателям — если этого недостаточно для вас, то поищите исходный код rails.

3. Я думаю, что в данном случае вы имеете в виду исходный код звездочек.

4. Да, но звездочки на самом деле просто просматривают список путей для поиска файла, как и любой загрузчик. Настройка путей выполняется с помощью рельсов.