Как стать автором
Обновить

Комментарии 10

Что может вебпак, чего не может sprocket?

Если сравнивать по фичам, то все, что может webpack, может и Sprockets (хоть и далеко не всегда это решается лекго и нативно в Sprockets). Для меня разница в подходах. Например, у webpack модульность — это основа. При управлении зависимостями webpack оперирует модулями (библиотеками), а Sprockets — файлами. Не нужно думать о явном подключении зависимостей через //= require в начале каждого файла.
Ну и каждый раз, запуская деплой, я радуюсь, что подготовка ассетов происходит за минуту и не убивает CPU на продакшне

У меня все просто :)
есть наборы файлов для
1. Незареганных
2. Зареганных
3. Админов
4. Общие для всех.
В зависимости от этого и подключается.
Прекомпайл занимает не так уж и много времени, если не первый раз.
А с вебпаком, надо еще ноду, нпм + еще 100500 зависимостей :)

Да, Sprockets конечно умеет делать разные бандлы, но для выделения общего бандла уже нужно самому думать, что туда добавлять.
По поводу devops оверхеда у меня тоже были опасения, но все очень быстро поставил и настроил, хоть опыта с node и не много было

Тоже давно отказались от sprockets и смигрировали на webpack (иногда просто gulp).

Полезно было бы так же выпилить полностью части sprockets из приложения. Например, убрать загрузку из rails/all в application.rb, почистить различные настройки в environments конфигах.

Подключение манифеста мы сделали по-другому, через патч ActionView::Helpers::AssetUrlHelper#compute_asset_path. Это позволило нам подключать и работать ассетами в Rails приложении точно так же, как если бы мы использовали sprockets.

В моем случае sprockets пришлось оставить из-за tinymce, который не захотел заводиться через webpack. Интересно, какой патч применили? И если вы полностью отказались от sprockets, то инлайновые картинки тоже через webpack подключаете?

ActionView::Helpers::AssetUrlHelper#compute_asset_path отвечает за генерацию пути к нужному ассету, поэтому мы его обернули для поиска в манифесте, который генерирует webpack. Что-то типа:


# примерный код

module Webpack
  module AssetsUrlHelper
    def compute_asset_path(path, options = {})
      asset_path = super(path, options)
      rev_path = Rails.application.config.assets_manifest[asset_path] || asset_path
      [Rails.application.config.assets.prefix, rev_path].join('/')
    end
  end
end

Инлайн картинки не использовали. Иконки обычно в шрифты или спрайты экспортируем, а других кейсов вроде как на ум не приходит :)

Коллега написал гем для интеграции вебпака с рельсами. Одна строчка в Gemfile и останется только запустить и настроить сам вебпак.
Исходники тут: https://github.com/rambler-digital-solutions/webpack-pipeline

С какими параметрами вебпак запускать? Насколько я понял, используетя встроенный механизм генерации манифеста, т.е. нужно не забыть опцию добавить при вызове вебпака. Документация не помешала бы)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории