Обновление от 10 сентября 2017 г. Webpacker Lite был объединен с версией 3 Webpacker. Если вы используете React on Rails, см. CHANGELOG для получения инструкций по миграции для обновления до версии 9 в React on Rails, которая использует версию 3 из Webpacker.

См. PR 601 on rails / webpacker для получения информации о слиянии Webpacker Lite с Webpacker, а также PR 908 для v9.0.0 React on Rails, основанного на Webpacker.

Я создатель и владелец React on Rails gem, возможно, самой популярной и успешной интеграции Ruby on Rails с экосистемой React / Redux / React-Router / Webpack.

До выпуска 8.0.0 React on Rails использовал Webpack для создания ресурсов для развертывания внутри конвейера ресурсов Rails. Webpack в основном использовался для объединения модулей, оставляя минификацию, снятие отпечатков пальцев и т. Д. В Asset Pipeline.

В начале 2017 года, с встряхиванием дерева Webpack (устранение мертвого кода в Webpack), я столкнулся с серьезной проблемой: запуск минификатора Asset Pipeline нарушал работу JavaScript. По сути, эта двойная минификация была не только ненужной, но и сломанной!

Примерно в это же время я обнаружил, что вскоре Rails официально включит сборщик модулей Webpack для подготовки ресурсов на стороне клиента, полностью минуя Rails Asset Pipeline. Новый гем, названный Webpacker, представил помощников, чтобы представления Rails получали правильный URL-адрес для развернутых ресурсов Webpack. Таким образом, я приступил к интеграции React on Rails с официальным гемом Webpacker. Я потратил немало часов на то, чтобы повлиять на проект Webpacker тем, что нужно React on Rails. Если вам интересно, вы можете прочитать Краткое изложение того, что работает здесь.

Так почему же я форк гем Webpacker создал гем Webpacker Lite (shakacode / webpacker_lite)?

  1. React on Rails требовал только крошечной части Webpacker, помощников для получения URL или пути к файлу для ресурсов, созданных Webpack. React on Rails не нуждался в остальном, что предоставляет Webpacker, как описано ниже.
  2. Обсуждения с другими сопровождающими React on Rails, а именно с Робом Уайсом, убедили меня, что гораздо более простой и компактный веб-пакет принесет пользу React on Rails, и это оправдало затраты на поддержку форка. Это было предсказуемо, так как во время интеграции React on Rails с Webpacker Lite я в конечном итоге внес много небольших изменений в функциональность. Эти отличия описаны в Readme Webpacker Lite.
  3. Как владелец React on Rails я нуждался (и будет нуждаться в нем по-прежнему) в возможности быстро вносить изменения в помощники без долгого обсуждения того, как эти изменения повлияют на все сообщество.

React on Rails: минимальная интеграция

Дизайн React on Rails намеренно избегает излишне тесной интеграции с другими быстро развивающимися инструментами, особенно с Webpack. React on Rails предполагает только:

  1. Ваше клиентское приложение полностью находится в каталоге /client. Это позволяет программисту, не являющемуся Rails-программистом, по существу откорректировать мир, не связанный с JavaScript.
  2. Вы настраиваете свой /config/initializers/react_on_rails.rb с некоторыми деталями, которые связаны с тем, как вы будете вызывать свои сценарии сборки и настраивать выходные каталоги Webpack.
  3. Ваш JavaScript будет использовать минимальный API для регистрации ваших компонентов React и хранилищ Redux.
  4. Ваш код Rails будет использовать минимальный API для монтирования ваших компонентов React в представлениях Rails и, возможно, гидратации ваших хранилищ Redux, включая бесшовную рендеринг сервера.

У нас есть и другие интересные необязательные функции, которые используют комбинацию Rails и React, например интернационализацию, удобные помощники по тестированию, автоматизацию развертывания.

Мы не делаем никаких предположений относительно того, как вы будете настраивать Webpack или как вы будете организовывать файлы в вашем /client каталоге.

Чего React on Rails не хотел от Webpacker

Webpacker во многом перекликается с React on Rails. Пользователям React on Rails не нужны следующие функции от Webpacker:

  • Сильно самоуверенная (автоматическая) конфигурация webpack, например, размещение файлов точки входа в каталог. Почему? Как бы вы указали разные точки входа для рендеринга на стороне сервера? Затем вы можете изменить некоторые значения по умолчанию из Webpacker, но, может быть, проще иметь собственную конфигурацию?
  • Установщики для UI-фреймворков, таких как React, Angular, Elm, Vue и т. д. Мы уже выбрали глубокую поддержку React.
  • Заглушки Ruby для вызова исполняемых файлов JavaScript, таких как webpack и yarn. Это хорошо решенная проблема в экосистеме узлов, и мы не хотим, чтобы React on Rails быть самоуверенным по этому поводу.
  • Структура, налагаемая на то, как организовать файлы Webpack и JavaScript. Мы уже решили, что единственная структура - иметь весь клиентский JavaScript под /client.

Какие новые предположения привносит Webpacker Lite в React on Rails?

С добавлением поддержки Webpacker Lite в React on Rails 8.x + вы можете дополнительно использовать Webpacker Lite при условии, что вы:

  1. Настройте Webpack для вывода файлов в каталог, который вы настроили в своем /config/webpacker_lite.yml. Используйте webpack-manifest-plugin для создания простого манифеста, который сопоставляет имя пакета, например webpack-bundle.js, с возможно хешированным именем файла, например webpack-bundle-fefd77bc.js. См. Эти инструкции для получения более подробной информации.
  2. Используйте помощники Webpacker Lite в представлениях Rails.

Как выбрать между Webpacker и Webpacker Lite?

Гем Webpacker конфигурирует сборщик модулей Webpack через соглашение по конфигурации через сгенерированные файлы и установку файлов конфигурации. React on Rails, с другой стороны, намеренно разработан с учетом минимальных и простых требований к настройке JavaScript и Webpack в приложении. Обратите внимание: генератор React on Rails служит лишь примером простейшей возможной настройки.

Вы можете выбрать либо простоту, и ограничения конфигурации Webpack по умолчанию для webpacker, либо вы можете выбрать гибкость обработки конфигурации Webpack по своему усмотрению и, таким образом, предпочесть Webpacker Lite. Сама Доктрина Rails ратовала за Дайте острые ножи. Самостоятельная настройка Webpack, безусловно, является подходом острого ножа по сравнению с использованием конфигурации Webpacker по умолчанию.

Если вам нужен самый быстрый способ включить фрагменты JavaScript в стиле ES6 в ваше приложение Rails, тогда Webpacker - отличное начало. Если вам нужна полная мощь Webpack и интерфейсной архитектуры React, то подумайте о Webpacker Lite и React on Rails.

Мне действительно нужно было форк?

В ShakaCode наши основные принципы в отношении открытого исходного кода:

  • Беги со стадом. Для этого мне следовало бы просто использовать базовый Webpacker.
  • Тщательно выбирайте битвы, выбирая те места, где вы не бегаете со стадом, и у вас есть для этого веские причины, поскольку вы будете поддерживать его. Поскольку я уже поддерживаю React on Rails, мне проще поддерживать упрощенный webpacker_lite.

Я надеюсь, что приведенное выше обсуждение проясняет, почему я решил создать вилку webpacker_lite для webpacker. В целом, моя цель номер один - сделать React on Rails как можно более простым в использовании, с целью Он просто работает. Если вы рассмотрите проекты, использующие React on Rails и мы получили высокую оценку React on Rails , согласитесь, что мы достигли этой цели. Кроме того, любые коммиты, которые мы добавляем в shakacode / webpacker_lite, можно объединить в rails / webpacker.

Обратите внимание, что Webpacker Lite отлично подойдет для любого проекта, которому нужны помощники просмотра Webpacker без каких-либо мнений о том, как настроить файл Webpack.

Попробуйте webpacker_lite на rubygems и дайте мне знать, что вы думаете! Не стесняйтесь обращаться ко мне напрямую по адресу [email protected]. Я искренне благодарен за отзывы об этой статье и за то, что вы нажали кнопку с рекомендациями ниже!