Как директивы Sprockets читаются в файле манифеста при использовании Rails?

Новичок в Rails, так что терпите меня... Я просматривал файл манифеста (application.js) сегодня, исследуя конвейер ресурсов, и мне было любопытно, как такие директивы, как //= require jquery читаются Это что-то делает Sprockets на заднем плане? Как? Почему директива должна быть сначала закомментирована, а знак равенства добавлен? Если я раскомментирую директивы и загружу файл application.js в свой браузер, я больше не вижу содержимого библиотеки jquery. Просто любопытно, как это работает в фоновом режиме.

Кроме того, когда я добавляю свою собственную таблицу стилей CSS, я должен добавить директиву require в файле манифеста application.css или добавить ссылку на таблицу стилей, такую ​​как <link rel="stylesheet" type="text/css" href="mystyle.css">? Или я делаю оба? Я предполагаю, что я не должен добавлять CSS прямо в файл манифеста...

Спасибо!

2 ответа

Решение

Не знаю, сколько вы знаете, поэтому постараюсь объяснить в деталях.

Rails хранит наши ресурсы (например, изображения, CSS, JS-файлы) в отдельных местах, так что все в порядке и лучше для нас - разработчиков, для использования. Это называется Assed Pipeline. Когда Rails загружает эти ресурсы, например, файлы css, он создает один большой файл из всех файлов нашего приложения, чтобы избежать нескольких вызовов. А Manifest - это как карта или правила для Rails, какие файлы включить в этот большой CSS-файл, и это *= это то, что говорит Rails, что именно включать (я рассматриваю это как синтаксис Rails). Итак, когда у вас есть что-то вроде этого:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree . 

require_tree . говорит Rails захватить все файлы из папки javascripts, в то время как //= require jqueryи другие направляют Rails к особым случаям - активам, обычно используемым вашими гемами (теми файлами, которые вы никогда не храните в своих папках javascripts /stylesheets, поэтому //= require_tree . не могу их видеть).

Когда вы добавляете свой файл на CSS, вы просто добавляете его в папку стилей и require_tree сообщает Rails, чтобы включить его в общую картину. Но у Rails есть хорошая особенность - строительные леса. Вы строите свой объект командой rails g scaffold User и Rails создает все для вас - представления, контроллер, модель, тесты (и кто знает, что еще:)). Так что в этом случае вам даже не нужно создавать файл CSS, просто вставьте в него правила CSS, и Rails найдет его из-за require_tree .

Немного другая история с sass-файлами:

Если вы хотите использовать несколько файлов Sass, вы должны обычно использовать правило Sass @import вместо этих директив Sprockets. При использовании директив Sprockets файлы Sass существуют в пределах их собственной области видимости, делая переменные или миксины доступными только в документе, в котором они были определены.

Поэтому, если вы будете использовать Bootstrap (вероятно, так и будет), это тоже важно знать.

Надеюсь это поможет

Как? Почему директива должна быть закомментирована первой

Потому что это директива звездочек. Он выполняется задолго до того, как любой js/coffee в этом файле получит шанс на запуск. И css не является "исполняемым" кодом вообще. Как сделать так, чтобы код такого типа не вызывал ошибок? Вы комментируете это.

... а знак равенства добавлен?

Чтобы отличить эти специальные директивы от других, "обычных" комментариев, которые могут быть в этом файле.

Я предполагаю, что я не должен добавлять CSS прямо в файл манифеста...

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

Кроме того, когда я добавляю свою собственную таблицу стилей CSS, я должен добавить директиву require в файле манифеста application.css

Незачем, require_tree . найдет и включит ваш файл.

или добавить ссылку на таблицу стилей, такую ​​как <link rel="stylesheet"type="text/css" href="mystyle.css">?

Нет, не делай этого.

Другие вопросы по тегам