ОБЪЯВЛЕНИЕ:Центр исследований и разработок Meituan Chengdu нанимает многоWeb-интерфейс, iOS, Android, Java-бэкенд, QA, техническая экспертиза, хорошая зарплата, большие перспективы развития, комфортная жизнь, если вам интересно, пишите на gwuhaolin@icloud.com
Передний круг подбрасывания часто рождает новые колеса. Пока это хорошо, оно может быстро привлечь много внимания. Неважно, насколько квалифицирован старший брат, пока он не так хорош, как новичок. , он будет заменен в ближайшее время.
родился из ниоткудаParcelНедавно он стал еще одной горячей точкой во внешнем кругу, и всего за несколько недель он выиграл 13K Star. Почему Parcel, будучи новичком в области передовых строительных инструментов, получил столько одобрения за короткий период времени? Какие преимущества он имеет перед своим старшим братом Webpack?
Мне потребовалось 6 месяцев, чтобы написать исчерпывающую книгу по Webpack.«Углубленный веб-пакет»Он был опубликован совсем недавно, и я чувствую, что новый Parcel разрезал меня пополам. Тем не менее, в этой статье мы подробно сравним их с честным и беспристрастным отношением, чтобы вы могли понять их прямые сходства и различия, а также их преимущества и недостатки, чтобы вы могли решить, выбрать ли Parcel или Webpack.
Чтобы сравнить их, давайте возьмем в качестве примера практический проект и используем Parcel и Webpack для их реализации соответственно.Фактические требования к проекту следующие:
- В проекте используется TypeScript+React+SCSS;
- Проект принятAntdбиблиотека компонентов пользовательского интерфейса, но для загрузки только используемых компонентов по запросу не все компоненты упакованы;
- проект используетLodashБиблиотеки для проверки наличия в сборке возможности отсеивать бесполезный код (TreeShaking);
- Конструкция должна поддерживать функцию горячей замены модуля для повышения эффективности разработки;
- Поддержка SourceMap для легкой отладки;
- Сравните скорость их первого запуска со скоростью сборки при прослушивании изменений;
- В производственной среде JS и CSS необходимо сжимать, а CSS необходимо извлекать в отдельные файлы и сравнивать с размером файла, который они создают в производственной среде;
- Необходимо сгенерировать HTML-файл, автоматически загружающий соответствующие ресурсы;
Посылка заставляет людей сиять
Использование Parcel после долгого использования Webpack похоже на использование iPhone после долгого использования машины Android. Вам не нужно беспокоиться о деталях и настройке. Большую часть времени Parcel достаточно и удобен в использовании.
Чтобы использовать Parcel для выполнения требований вышеуказанных проектов, я просто сосредоточился на написании необходимого кода для страницы проекта, и Parcel разумно и быстро помог мне создать результат, который может нормально работать.
Вот что в Parcel заставило мое сердце трепетать:
- Parcel может выполнить вышеуказанные требования к строительству проекта без настройки;
- Parcel имеет встроенные схемы построения для распространенных сценариев и их зависимостей, поэтому нет необходимости устанавливать различные зависимости;
- Parcel может использовать HTML в качестве входа для автоматического обнаружения и упаковки зависимых ресурсов;
- Parcel поддерживает горячую замену модулей по умолчанию, что действительно «из коробки»;
С другой стороны, Webpack доставляет гораздо больше хлопот, чем Parcel:
- нужно написатькуча настроек;
- Вам нужно установитькуча зависимостей;
- Не может просто автоматически генерировать HTML;
Этот проект занял у меня меньше минуты, чтобы собрать и настроить с помощью Parcel, и 5 минут, чтобы настроить с помощью Webpack.
Посылке еще нужно время на полировку
Благодаря вышеприведенной проектной практике было обнаружено, что Parcel в настоящее время имеет следующие очевидные недостатки:
- SourceMap не поддерживается: В режиме разработки Parcel не выводит SourceMap, и в настоящее время он может только отлаживать код с крайне низкой читабельностью;
- Не поддерживает отбраковку недопустимого кода (TreeShaking): Много раз мы использовали только одну функцию в библиотеке, и в результате Parcel упаковывал всю библиотеку;
- Некоторые зависимости будут вызывать ошибку Parcel: Когда ваш проект зависит от некоторых модулей в Npm, некоторые модули Npm заставят Parcel работать неправильно;
Посылка должна платить за нулевую конфигурацию
Нулевая конфигурация на самом деле реализована с использованием различных распространенных сценариев в качестве значений по умолчанию.Хотя это может сэкономить много работы и быстро начать работу, это также принесет некоторые проблемы:
-
Непослушный node_module: Некоторые зависимые библиотеки могут быть случайно включены при публикации в Npm.
.babelrc
postcss.config.js
tsconfig.json
Эти файлы конфигурации также публикуются вместе, Поскольку Parcel в настоящее время находит эти файлы конфигурации в каталоге, он будет думать, что код в проекте нуждается в обработке. Например, библиотека мини-магазина ставит.babelrc
Файл был опубликован на Npm, и проект зависел от JS-кода в библиотеке, который был скомпилирован в ES5, но Parcel использовала Babel для его повторной обработки. Чиновники Npm не оговаривают, каким спецификациям должны соответствовать пакеты, опубликованные на Npm, что делает Parcel очень сложным. -
негибкая конфигурация: Посылка с нулевой конфигурацией закрывает многие элементы конфигурации, которые нельзя изменить в некоторых необходимых сценариях конфигурации. Например:
- Невозможно управлять специальной обработкой частичных файлов для таких требований, как загрузка по требованию;
- Не в состоянии контролироватьХэш-значение и имя имени выходного файла;
- Нет контроля над структурой выходных каталогов сборки;
- невозможноПути сопоставления для сокращения операторов импорта;
- Сервер разработки HTTP не поддерживаетHistoryApi;
Сценарии использования посылки ограничены
В настоящее время ПосылкаМожет использоваться только для создания веб-страниц для работы в браузере., который также является его отправной точкой и фокусом. В индустрии программного обеспечения невозможно иметь простое решение, которое можно было бы адаптировать к различным сценариям, и даже если так называемый искусственный интеллект сможет решить эту задачу, искусственный интеллект не может гарантировать 100% правильность.
С другой стороны, помимо создания веб-страниц, Webpack также может:
- Упаковано и выпущено в библиотеку на Npm
- Создание приложений Node.js (изоморфных приложений)
- Создание электронных приложений
- Создание автономных приложений (ServiceWorkers)
Сравнение скорости сборки и размера выходного файла
Для создания вышеупомянутых проектов с помощью Parcel и Webpack соответственно собранные данные выглядят следующим образом:
элемент данных | Parcel | Webpack |
---|---|---|
Время сборки среды сборки | 8.310s | 9.58s |
Время запуска среды разработки | 5.42s | 8.06s |
Прослушивание изменений времени сборки | 3.17s | 2.87s |
Сгенерировать размер выходного JS-файла среды | 544K | 274K |
Размер выходного CSS-файла среды сборки | 23K | 23K |
Из приведенных выше данных видно, что:Parcel строится быстро, но выходные файлы Parcel большие
Посылка вызывает скорость сборки и вызывает IOS, чем Android аналогичные причины использования их более гладкой:
- Parcel интегрирован и оптимизирован лучше, потому что он встроен, в то время как Webpack использует плагины и механизмы загрузчика, чтобы разрешить сторонние расширения, что снизит производительность;
- Parcel построен параллельно, чтобы построить многопроцесс, а также процесс создания одного веб-запада по умолчанию (WebPack также поддерживает многопроцесс);
Причина, по которой Parcel выводит большой файл JS:
- TreeShaking не поддерживается
- Имена всех файлов появляются в построенном JS, как показано на рисунке:
Суммировать
Текущая версия Parcel похожа на бета-версию iPhone. Она выглядит красиво, но не может быть использована для среды генерации. Если вы используете Parcel для среды генерации сейчас, я уверен, вы обязательно наступите на много ям. Неважно, если вы наступите на яму, самое страшное, что вы не сможете найти решение в Интернете, чтобы решить проблему быстро.
Я не отговариваю всех от использования Parcel.Истории всегда нужны первопроходцы для ее продвижения.Так же как Стив Джобс руководил эпохой без колебаний, так и нам нужно практиковать Parcel.Ямы заполняются одна за другой,поэтому призываю всех работать над некоторые небольшие личные проекты.Используйте Parcel в .
Если Parcel сможет решить эти проблемы, упомянутые выше, я без колебаний использую его в своем следующем проекте.