Rails 5.2+: почему до сих пор используют конвейер ресурсов с веб-упаковщиком? - PullRequest
4 голосов
/ 19 марта 2019

Я читал документацию по гему Rails webpacker , где написано:

Webpacker позволяет легко использовать препроцессор JavaScript и пакетный веб-пакет 4.x.x + для управления JavaScript-приложениями в Rails. Он сосуществует с конвейером ресурсов, поскольку основной целью веб-пакета является JavaScript, похожий на приложение, а не изображения, CSS или даже JavaScript Sprinkles (все это продолжает жить в приложении / ресурсах).

Однако можно использовать Webpacker для CSS, изображений и шрифтов, а также в этом случае вам может даже не понадобиться конвейер активов. Это особенно актуально при использовании исключительно компонентных структур JavaScript.

Я пытаюсь понять причину использования обоих старого конвейера ресурсов для CSS / images / JS-sprinkles, если веб-упаковщик способен справиться со всем этим?

Я читал некоторые другие статьи, в которых рассказывается, как использовать веб-упаковщик для всего этого, но я не понимаю причины этого решения.

Это просто для поддержки устаревших приложений, и в конечном итоге старый конвейер ресурсов исчезнет, ​​а веб-упаковщик будет использоваться для всего в приложениях Rails?

1 Ответ

3 голосов
/ 03 мая 2019

Как сопровождающий приложения, существовавшего до Webpacker, я могу привести одну причину:

Трудно перенести существующий интерфейс из Sprockets в Webpack.

Sprockets объединяет все JS в один большой файл с общей областью действия. Webpack изолирует область действия каждого модуля JS. Чтобы перейти на Webpack, вам нужно убедиться, что ваш код по-прежнему работает с изоляцией области действия.

Что часто проблематично, потому что во времена Sprockets у вас не было должных JS-требований, и вам приходилось полагаться на глобальные переменные или переменные верхнего уровня для совместного использования кода и данных между исходными файлами JS.

Rails не предлагает безболезненного пути перехода от компиляции Sprockets к Webpack. Таким образом, он должен поддерживать оба.

Но чтобы ответить на другой вопрос - в дальнейшем вам следует использовать Webpacker , если у вас достаточно JS, чтобы сделать его стоящим .

Если ваш интерфейс простой, вы пропустите некоторые неприятности JS, если будете использовать Sprockets. Например, если вы хотите добавить 10 строк JS в свое приложение, вам может не потребоваться настройка целой среды JS с управлением зависимостями и node_modules и т. Д., Что является ценой использования Webpack / Webpacker. Было бы еще более бессмысленно управлять средой JS, если бы все, что вам нужно, - это скомпилировать CSS и добавить дайджесты к именам файлов вашего изображения - на что Sprockets в совершенстве способен, без package.json и всего, что связано с JS.

Следовательно, есть вторая причина:

Webpacker хорош для приложений, которые имеют значительную кодовую базу внешнего интерфейса. Sprockets хорош для добавления небольшого количества JavaScript в традиционное приложение, отображаемое на сервере, и для приложений без JavaScript вообще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...