Как правильно разделить файлы стилей в рельсах?
В настоящее время я использую оба rails 2
а также rails 3
В документации сказано, что все стили со всех страниц собраны в один файл.
Например, новое приложение Rails содержит файл app/assets/javascripts/application.js по умолчанию, который содержит следующие строки:
// ...
//= require jquery
//= require jquery_ujs
//= require_tree .
Я заинтересован в том, как рельсы справляются с этим. Как мне написать все стили в одном файле. Это делает это для каждой страницы, или это делает стиль в отдельных файлах? Каковы различия в подходе между рельсами 2 и рельсами 3?
1 ответ
Рельсы 3(точнее.1) дали нам пиплэйн актива. Конвейер ресурсов использует application.js и application.css, как вы видели.
Что делает конвейер ресурсов, так это берет все ваши разные файлы javascript и упаковывает их в один большой файл (обычно application.js).
Идея заключается в том, что вы можете написать javascript один файл на контроллер, как вы сказали, и конвейер ресурсов позже соберет все вместе и представит его как один большой файл. Это хорошо для производительности и хорошо для разработчиков. (Небольшие файлы легче рассуждать и поддерживать).
Конвейер активов также добавляет некоторые соглашения: javascripts живут в app/assets/javascripts
(и некоторые другие определенные места тоже, я думаю), обычно один файл на контроллер (но у вас может быть больше одного!), и этот javascript может фактически быть сгенерирован машиной на каком-то языке, который выводит Javascript. ( http://coffeescript.org/ является примером такого языка - Coffeescript - это не Javascript, а компилятор Coffeescript выводит Javascript).
Конвейер активов вносит структуру в приложения Rails. Обычно, если я нахожусь на проекте, я буду иметь javascript в одном из трех мест: app/assets/javascript
для моего собственного кода приложения, lib/assets/javascript
для некоторых общих утилит я могу поделиться в разных проектах, и vendor/assets/javascript
для таких вещей, как библиотеки jQuery или Javascript от сообщества открытого исходного кода, которые не являются моими.
Предыдущий, с Rails 2, весь ваш Javascript жил в public/javascripts/
, И я имею в виду все: файлы javascript, которые могут содержать вашу собственную логику, файлы, которые могут быть огромными (и трудно для разработчиков), потому что каждый раз, когда вам нужен новый обратный вызов jQuery, вы добавляете его в public/javascripts/application.js
, Вы могли бы иметь служебные модули, смешанные с кодом поставщика, смешанным с Javascript, который вы хотите извлечь когда-нибудь. По словам DHH, это был ящик для мусора.
Конвейер ресурсов дает нам соглашения о расположении, один файл на контроллер и упаковку / оптимизацию Javascript, что ускоряет загрузку на стороне клиента.
В итоге: команда Rails создает леса app/assets/javascripts/your_controller.js.coffee
, В этом файле вы должны добавить Javascript, связанный с представлениями, обслуживаемыми этим контроллером. Это лучшая практика и хорошая идея.
Стоит отметить, что весь ваш код Javascript в конечном итоге компилируется компьютером в один большой файл, и что иногда эта абстракция просачивается. (Например, два разных файла javascript, связывающих два разных события с одним и тем же идентификатором Javascript совершенно случайно). Именно из-за этих неплотных абстракций существует множество острых граней в конвейере активов и множество вопросов по конвейеру активов в SO.