Могу ли я создать рабочее веб-приложение JavaScript без bundler?

#javascript #webpack #ecmascript-6 #module #parceljs

#javascript #webpack #ecmascript-6 #модуль #parceljs

Вопрос:

Недавно я прошел через кроличью нору, изучая модульное программирование на JavaScript, включая некоторую историю модульных систем JS, bundlers и модулей ES2015. Теперь я понимаю некоторые проблемы, которые помогают / редактируют bundlers, такие как:

  • задержка в сети (более эффективное кэширование одного пакета, соединения HTTP / 1.0),
  • ограничения производительности на размер модулей приложения (минимизация, перетряхивание дерева),
  • ES2015 не поддерживает некоторые функции (голый импорт),
  • и обратная совместимость со старыми модульными системами (перенос синтаксиса модулей ES2015).

Однако я хотел бы знать, возможно ли создать производственное веб-приложение JS в 2020 году, которое не использует такой пакет, как webpack или Parcel, и использует модули ES2015? Оговорка в том, что компилятор от источника к источнику, такой как Babel, все еще может использоваться при условии, что он сохраняет синтаксис модулей ES2015. Я не говорю, что хотел бы это сделать, но ради аргументации, каковы были бы недостатки?

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

1. Вы имеете в виду Javascript, который выполняется в браузере, или Javascript, который выполняется на сервере в node.js или и то, и другое? Для любого серверного кода не требуется никакого bundler.

2. Клиентский код не обязательно должен быть объединен при запуске в современном браузере, но если вы собираетесь разбить свой код на множество небольших модулей (ради эффективности разработки и повторного использования), то загрузка будет очень неэффективной, если вы не используете bundler, который может уменьшить количество отдельных файлов, которые необходимо загружать. Помимо этого, я не уверен, что еще вы пытаетесь спросить здесь.

3. @jfriend00 Да, спасибо за разъяснение, я имею в виду JavaScript, который запускается в браузере. Я только что прочитал эту статью и добавил <script type="module">import _ from 'https://unpkg.com/lodash-es'</script> в свою index.html , чтобы увидеть водопад сетевых запросов. Итак, я понимаю, что из-за того, что JS является JIT-скомпилированным языком, доставляемым по HTTP, bundler можно рассматривать как часть «JS SDK»? По крайней мере, до тех пор, пока HTTP не сможет более эффективно доставлять модули JS?

4. Bundler будет желателен, если вы разрабатываете клиентские JS-файлы для наилучшей модульной разработки и, следовательно, не разрабатываете клиентские JS-файлы для эффективной доставки. «Часть JS SDK» — это вопрос терминологии и мнения, а не фактов, поэтому я не буду комментировать это утверждение. Конечно, можно с самого начала создавать JS-файлы на стороне клиента для эффективной доставки на стороне клиента и не использовать bundler (как мы привыкли делать), но вы не сможете также разрабатывать макет файлов для модульной разработки. Bundler позволяет достичь обеих целей.

5. @jfriend00 «Bundler позволяет достичь обеих целей» — спасибо, это имеет смысл.

Ответ №1:

Клиентский код не обязательно должен быть объединен при запуске в современном браузере, но если вы собираетесь разбить свой код на множество небольших модулей (ради эффективности разработки и повторного использования), то загрузка будет очень неэффективной, если вы не используете bundler, который может уменьшить количество отдельных файлов, которые необходимо загружать.

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

«Часть JS SDK» — это вопрос терминологии и мнения, а не фактов, поэтому я не буду комментировать это утверждение.

Конечно, можно с самого начала создавать JS-файлы на стороне клиента для эффективной доставки на стороне клиента и не использовать bundler (как мы привыкли делать), но вы не сможете также разрабатывать макет файлов для модульной разработки. Bundler позволяет достичь обеих целей, вероятно, поэтому они так популярны.

Однако я хотел бы знать, возможно ли создать производственное веб-приложение JS в 2020 году, которое не использует такой пакет, как webpack или Parcel, и использует модули ES2015?

Да, это возможно без bundler, если вы запускаете в браузере, который поддерживает import и export .

Я не говорю, что хотел бы это сделать, но ради аргументации, каковы были бы недостатки?

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