2016-11-05 3 views
0

Я новичок в рельсах, и я немного смущен тем, как загружаются активы. Я могу заставить все работать, но я хотел бы понять, что на самом деле происходит за кулисами.Объяснение использования активов Rails

Я читал документацию, но есть вещи, которые я не понимаю полностью.

файл манифеста

Первое, что меня смущает использование файлов манифеста.

Например, если в моем приложении/активы/JavaScripts/application.js файл у меня есть:

//= require_tree . 

Rails документация говорит:

говорит Звездочка рекурсивно включать все файлы JavaScript в указанная директория на выходе

Что мне непонятно, какой каталог? приложение/активы/JavaScripts /?

Означает ли это, что если я добавлю файл в app/assets/javascripts/он будет загружен и обслуживаться?

Если добавить драгоценный камень, который требует, чтобы добавить файл example.js мне нужно добавить в файл манифеста:

//= require example.js 

Но почему это необходимо, если //= require_tree уже загружает и обрабатывает файлы в приложение/активы/javascripts /, где я разместил свой example.js? Хорошо, что позволяет мне указать порядок, если позже я добавлю больше требуемых. Но кроме этого?

HTML FILE

И тогда скрипт будет включен в application.html.erb

<%= javascript_include_tag ('application'), 'data-turbolinks-track' => true %> 

Я понимаю, это загружает файл application.js упомянутый выше, и поэтому различные //= require в нем ,

Иногда бывает, что требуется для сценария конкретного файла как:

<script src="js/example.js"></script> 

ли этот сценарий не будет <script src="js/example.js"></script> делать ту же самую вещь //= require example.js?

PUBLIC VS APP АКТИВЫ

Я понимаю, что если поместить файл моего example.js на публике/папку активов не будет собраны, но подают отдельно. Зачем мне это делать? Разумно ли это сделать в случае, если файл некорректно передан при конкатенировании и компиляции и работает только в том случае, если его обслуживают отдельно? Другими словами, если я включаю файл .js в app/assest, и у него есть проблемы с загрузкой или разрывом вещей, стоит ли пытаться удалить его оттуда и перенести его в public/assets или это просто не имеет смысла?

APP АКТИВЫ VS VENDOR АКТИВЫ

На какой сценарий я должен добавить файл поставщика активов вместо приложения активов? В чем разница между добавлением его в другое место? И у моего поставщика/активов/javascripts у меня есть только пустой файл .keep. Таким образом, есть такая вещь, как файл манифеста на app/assets. Как тогда ссылаются файлы в этой папке?

ответ

1

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

Так //= require_tree . говорит звездочками загружать любые файлы в app/assets/javascripts/ и объединить их в application.js.

ли этот сценарий не будет <script src="js/example.js"></script> делать ту же самую вещь // = требуется example.js?

Нет. Рельсы обслуживают активы как отдельные файлы в разработке, поэтому при возникновении ошибок вы получаете значимый номер строки и ссылку на файл.

В производстве он объединяет и минимизирует активы, которые важны для производительности.

Звездочки не проверяют ваши представления/макеты для тегов скриптов. Таким образом, первое приведет к двум запросам.

Я понимаю, что если я разместил свой файл example.js в общедоступной/ресурсной папке , он не будет скомпилирован, но будет подаваться отдельно. Зачем мне делать ?

Публичный каталог размещается под корнем веб-серверов. Поскольку файлы там обслуживаются без особого вмешательства, это хорошее место для таких вещей, как страницы с ошибками или где вам нужны активы, которые имеют статическое имя без отпечатка кеша.

В каком сценарии следует добавить файл к активам поставщика вместо приложений ? В чем разница между добавлением его в место или ?

/vendor/assets - это место для размещения активов, которые не созданы вами или которые не являются частью приложения. Оба они добавляются в пути загрузки звездочек, поэтому результаты идентичны. Это скорее вопрос организации кода.

Смежные вопросы