ранее опубликовано на web-crunch.com

Webpack, хотя его немного сложно настроить, остается передовым инструментом для современной веб-разработки. Этот пост/видео проведет вас через добавление Webpack в более старый проект Ruby on Rails 5.2, а также в последнюю бета-версию Ruby on Rails 6.

Представленные здесь демонстрации предназначены для общего обзора того, как можно использовать Webpack внутри Ruby on Rails независимо от версии.

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

С Webpacker вы получаете эти и другие функции:

  • веб-пакет 4.х.х.
  • ES6 с бабелем
  • Автоматическое разделение кода с использованием нескольких точек входа
  • Таблицы стилей — Sass и CSS
  • Изображения и шрифты
  • PostCSS — автопрефиксер
  • Сжатие ресурсов, исходные карты и минимизация
  • поддержка CDN
  • React, Angular, Elm и Vue поддерживаются «из коробки».
  • Помощники представления Rails

О многих из этих вещей Rails уже позаботится с конвейером ресурсов. При желании вы можете использовать конвейер ресурсов для изображений, шрифтов, css и многого другого, опираясь на webpacker для JavaScript. Это будет новое значение по умолчанию в Rails 6.

Общие вопросы

Зачем мне нужен веб-пакет с Rails, если конвейер ресурсов уже присутствует?

На самом деле, в большинстве случаев вы нет, но это упрощает доступ к современным интерфейсным платформам, таким как Vue.js или React.js, с минимальным временем настройки. Конвейер ресурсов по-прежнему работает, как и должен, наряду с новым рабочим процессом веб-пакета. Все активы, связанные с webpack, теперь находятся внутри каталога app/javascript.

Зависит ли веб-пакет от конвейера ресурсов? Они конфликтуют?

Gem webpacker не зависит напрямую от конвейера ресурсов, хотя он подключается к нескольким командам rake, связанным с каждой установкой Rails rails assets:precompile, например, запускает компиляцию конвейера ресурсов и команду webpack для компиляции всех ресурсов в данном проект с использованием обоих. Они конфликтуют только в том случае, если ваш код конфликтует. Хорошей практикой является разделение задач. Обычно я создаю весь javascript в app/javascript, а затем обращаюсь к конвейеру ресурсов app/assets/ для любых css, изображений или других ресурсов, которые могут потребоваться проекту, над которым я работаю.

Нужен ли мне конвейер активов с добавлением веб-пакета?

На самом деле нет, но конвейер ресурсов имеет множество удобных функций для рендеринга ресурсов в представлениях, к которым вы или ваша команда можете привыкнуть. К счастью, вы можете сделать то же самое с активами внутри app/javascript. Рендеринг изображений, ресурсов, CSS, JavaScript и многого другого вполне возможен.

Хотите изучить Ruby on Rails с нуля?

Ознакомьтесь с моим новым курсом Hello Railshellorails.io