Comments 10
Если сравнивать по фичам, то все, что может webpack, может и Sprockets (хоть и далеко не всегда это решается лекго и нативно в Sprockets). Для меня разница в подходах. Например, у webpack модульность — это основа. При управлении зависимостями webpack оперирует модулями (библиотеками), а Sprockets — файлами. Не нужно думать о явном подключении зависимостей через //= require
в начале каждого файла.
Ну и каждый раз, запуская деплой, я радуюсь, что подготовка ассетов происходит за минуту и не убивает CPU на продакшне
Да, Sprockets конечно умеет делать разные бандлы, но для выделения общего бандла уже нужно самому думать, что туда добавлять.
По поводу devops оверхеда у меня тоже были опасения, но все очень быстро поставил и настроил, хоть опыта с node и не много было
Полезно было бы так же выпилить полностью части 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
Инлайн картинки не использовали. Иконки обычно в шрифты или спрайты экспортируем, а других кейсов вроде как на ум не приходит :)
Исходники тут: https://github.com/rambler-digital-solutions/webpack-pipeline
Оформил в виде гема https://github.com/Darkside73/webpacked
Используем Webpack вместо Sprockets в Ruby on Rails