Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Bundle js: Зачем и где все это нужно bundle.js?

Содержание

Зачем и где все это нужно bundle.js?

Какая потребность в bundle.js для Node.js/Angular/React приложений? Что делать, если он не используется при создании и развертывании приложения?

javascript

angularjs

node.js

reactjs

Поделиться

Источник


Ashfaque Rifaye    

09 декабря 2018 в 07:08

2 ответа


  • Зачем это нужно OrderedDictionary, ListDictionary, и HybridDictionary?`

    Зачем нужны три разных словаря — OrderedDictionary,ListDictionary и HybridDictionary, когда все они выполняют сходные функции? Ни один из них не сортируется, и элементы коллекции могут быть извлечены по ключу во всех из них. Итак, какова цель трех различных классов?

  • Что значит делегировать? Зачем нам это нужно?

    Возможный Дубликат : Делегаты, can’t соберитесь с мыслями Привет друзья, Что значит делегировать в objective C? Зачем нам это нужно? Когда мы должны использовать его? Есть ли в нем какие-нибудь типы? Как им пользоваться? Пожалуйста, друзья, используйте простые слова и примеры, чтобы объяснить.



12

Откуда берется комплектация?

Мы начали объединять наши активы по соображениям производительности.

  • HTTP1 поддерживает ограниченное количество запросов на одно соединение. Создание соединений для каждого актива убивало производительность.
  • Мы начали объединять вещи постранично, чтобы повысить производительность за счет более эффективного кэширования.
  • Мы смогли добавить к нему отпечаток пальца и загрузить его на CDN. (главная страница-page.231434.js). Таким образом, мы смогли развернуть наше приложение, докеризовав его.
  • Пакетирование также помогает нам уменьшить размер страницы больше, потому что bundler знает всю систему. Это означает, что он может удалить неиспользуемые вещи и упростить их минимизацию. Вы не можете легко сделать это без связывателя.
  • Кроме того, связыватели используют транспиляторы. Браузеры не всегда могут запускать коды, которые мы пишем, например Typescript, CoffeeScript. Упаковщики могут легко транспилировать эти коды в пакеты.

Нам все еще это нужно?

В наши дни многое изменилось, как и наши активы.

  • Во-первых, почти каждый браузер теперь поддерживает HTTP/2., поэтому мы можем запрашивать несколько файлов в одном соединении. Связывание больше не требуется из-за этого. Кроме того, у нас есть http/2 серверный push.
  • Библиотеки, такие как React, Angular, Vue, намного эффективнее по размеру. Их можно легко загрузить на страницу из источника поддержки gzip.

Вот причины, по которым мы больше не нуждаемся в связывании.

Но, исходя из вашего проекта, нам все еще может понадобиться комплектация. Это истинная правда.

Я бы все равно пошел с упаковкой.


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

Так что на самом деле в настоящее время он просто основан на вашем проекте. Причин для повышения производительности больше нет.

Поделиться


Ahmet Can Güven    

09 декабря 2018 в 08:02



1

В настоящее время мы обычно используем инструменты пакета,такие как webpack, для упаковки js, css или других файлов. С правильными загрузчиками webpack упакует файлы во многие bundle файлов, и браузер поймет их.

  1. Модуль bundler проанализирует проект ,найдет зависимость и получит необходимый пакет только при загрузке веб-страницы.
  2. И с модулем bundler он будет использовать некоторые языки, которые браузер не может прочитать, например typescript ,меньше и так далее.

Модуль bundler не нужен для веб-проекта, но он улучшит производительность веб-страниц. Если не использовать модуль bundler, web не сможет получить только необходимый bundle при загрузке. Таким образом, время загрузки будет больше.

Поделиться


Root    

09 декабря 2018 в 07:43


  • вложенный конструктор. Зачем это нужно?

    class Character(Entity): def __init__(self, x, y, hp): Entity.__init__(self, x, y) self.hp = hp self.items = [] Character является дочерним классом родительского класса Entity . Entity класс также имеет функцию __init__ . Зачем нужно писать обе функции __init__ ? Почему бы не написать только…

  • Зачем все это нужно для JSON?

    Я изучаю JSON, и я получил его, чтобы работать, но я хочу знать WHY это работает и как это работает. Я не понимаю, зачем нужны некоторые линии и что они делают. Ниже приведен мой основной cs и мой класс Person : у меня сложилось впечатление, что я делаю JSONstring равным содержанию JSON.json. Если…


Похожие вопросы:

webpack: нужно ли устанавливать webpack для использования bundle.js

Я установил webpack локально, загружаю bundle.js на сервер и вызываю его с помощью тега script с сервера index.html . Делая это, bundle.js не может вызвать модуль jquery внутри самого bundle….

Github: зачем мне это нужно?

Я все еще совершенно не уверен, как его использовать, но я только что скачал Git и настраивал его в соответствии с их веб-страницей . В разделе о кэшировании паролей говорится, что если мне не нужно…

что такое silverlight developer runtime ? и зачем нам это нужно?

Я хочу узнать более подробно о времени выполнения разработчика silverlight что такое silverlight developer runtime ? и зачем нам это нужно ?

Зачем это нужно OrderedDictionary, ListDictionary, и HybridDictionary?`

Зачем нужны три разных словаря — OrderedDictionary,ListDictionary и HybridDictionary, когда все они выполняют сходные функции? Ни один из них не сортируется, и элементы коллекции могут быть…

Что значит делегировать? Зачем нам это нужно?

Возможный Дубликат : Делегаты, can’t соберитесь с мыслями Привет друзья, Что значит делегировать в objective C? Зачем нам это нужно? Когда мы должны использовать его? Есть ли в нем какие-нибудь…

вложенный конструктор. Зачем это нужно?

class Character(Entity): def __init__(self, x, y, hp): Entity.__init__(self, x, y) self.hp = hp self.items = [] Character является дочерним классом родительского класса Entity . Entity класс также…

Зачем все это нужно для JSON?

Я изучаю JSON, и я получил его, чтобы работать, но я хочу знать WHY это работает и как это работает. Я не понимаю, зачем нужны некоторые линии и что они делают. Ниже приведен мой основной cs и мой…

Что такое тряска дерева и зачем мне это нужно?

Я начал изучать Angular 2 и наткнулся на этот термин tree shaking, и я не смог найти никакого хорошего объяснения этому с точки зрения начинающих. У меня есть два вопроса : Что такое тряска дерева и…

Создайте отдельный bundle.js для каждого html (форма)

В настоящее время я работаю над проектом react SPA, где мне нужно сделать несколько форм с логикой. Каждая форма имеет одинаковые компоненты и некоторые уникальные. Теперь: когда клиент выберет одну…

Где bundle.js проекта реагируют

Я создал проект с create-react-app ,он может правильно работать на http://localhost:3000 , но мне нужно установить кросс-домен с nginx, конфигурация nginx выглядит следующим образом: server { listen…

Webpack: не могу найти bundle.js

Наконец-то у меня работает сервер he dev, и я получаю что-то на экране.
Я настроил сценарий «start» для NPM следующим образом:

"start": "webpack-dev-server --content-base app"

Я получаю ошибку:

http://localhost:8080/bundle.js Failed to load resource: the server responded with a status of 404 (Not Found)

Мои папки настроены следующим образом:

appDir
  ->app
  ->node_modules
  webpack.config.js
  package.json

Мой webpack.config.js:

module.exports = {
    context: __dirname + '/app',
    entry: './index.js',
    output: {
        path: __dirname + '/app',
        filename: './bundle.js'
    }
}

Вы можете сказать, что случилось?

javascript

node.js

webpack

Поделиться

Источник


yccteam    

28 апреля 2015 в 15:15

2 ответа


  • Не могу найти bundle.js

    Я знаю, что этот вопрос уже задавался раньше, но, честно говоря, нигде не могу найти ответа-Похоже, что я делаю все, что должен, однако bundle не создается. Итак, у меня есть этот файл webpack.config.js , который должен обрабатывать HMR + React и typescript (с синтаксисом tsx), но он не создает…

  • WEBPACK DEV сервер не работает, хотя webpack правильно генерирует bundle.js

    Я попытался запустить webpack-dev-server в задаче Gulp, но даже если webpack генерирует bundle.js правильно, webpack-dev-server не работает. Когда я звоню http: / / [IP адрес компьютера]: 8080, он говорит: этот сайт недоступен. Ниже приводится задача Gulp: import webpack from ‘webpack’; import…



8

bundle.js находится в вашем каталоге /app . Этот параметр path в выводе указывает абсолютный путь, по которому идет файл.

Кроме того, вам не нужно ./ в имени файла. Это будет решено относительно output.path , но это сбивает с толку и, возможно, способствовало вашей проблеме.

Поделиться


Lim H.    

28 апреля 2015 в 15:18



1

Проблема в основном в указании bundle js в index.html. Причина webpack bundle.js не найдена, потому что вам нужно указать абсолютный путь в index.html. Предположим, что ваши bundle.js и index.html сгенерированы в папке dist, тогда это должно быть что-то вроде приведенного ниже.

<script src="/bundle.js"></script>

Поделиться


Hemadri Dasari    

01 августа 2018 в 05:07


Похожие вопросы:

Как сделать более читабельным bundle.js с webpack (sourcemap)?

Я пытаюсь сделать свой первый проект webpack и не могу найти способ изменить цифровые клавиши, которые представляют модули в моем выводе bundle.js, на описательную строку, чтобы было легче trace его…

bundle.js отсутствует в сборке webpack при использовании webpack-dev-server

Я посмотрел на подобное, но не смог найти концертного ответа, который решил бы мою проблему. Я не могу найти файл bundle.js, хотя указываю, где он должен быть выведен, и все работает в браузере. Я…

React, Webpack: bundle.js не генерируется

Edit: причина заключалась в том , что я запускал webpack-dev-server , когда запускал только webpack , это работало. Я использую React и Webpack. bundle.js не генерируется. Я нашел этот вопрос на SO…

Не могу найти bundle.js

Я знаю, что этот вопрос уже задавался раньше, но, честно говоря, нигде не могу найти ответа-Похоже, что я делаю все, что должен, однако bundle не создается. Итак, у меня есть этот файл…

WEBPACK DEV сервер не работает, хотя webpack правильно генерирует bundle.js

Я попытался запустить webpack-dev-server в задаче Gulp, но даже если webpack генерирует bundle.js правильно, webpack-dev-server не работает. Когда я звоню http: / / [IP адрес компьютера]: 8080, он…

bundle.js не найден с webpack

Учимся использовать webpack для настройки проекта стека MERN. После запуска webpack на bundle все и запуска экспресс-сервера я вижу, что bundle.js не найден, и я вижу код состояния…

Webpack не работает (bundle.js)

Я пытаюсь создать bundle.js, но webpack не работает. Вот какая у меня ошибка: C:\Users\myname\Documents\lynda\ECMAScript6\Ch02\02_02\youtube2>webpack Invalid configuration object. Webpack has…

bundle.js не найдено [Webpack]

[UPDATE] bundle.js был фактически создан в памяти. Лучший способ-сохранить index.html и bundle.js (настроенные в webpack.config.js) в одном каталоге, чтобы избежать каких-либо проблем. Я пытался…

webpack не генерирует bundle.js

Я делаю веб-приложение, использующее react и php, и я использую webpack для es6 to js, поэтому я сгенерировал файлы, но у меня есть проблема с файлом webpack output bundle.js. это мой…

Получить / импортировать bootstrap.js из Webpack bundle.js

К сожалению, у меня нет опыта работы с webpack. У меня есть страница шаблона, сгенерированная с помощью Webpack. Страница показывает модальный диалог с bootstrap.js bootstrap.js, включенный в…

ASP.NET Core | Бандлинг и минификация

Последнее обновление: 16.12.2019

При работе со скриптами и стилями в проектах веб-приложений в самых различных технологиях нередко используются различные средства автоматизации задач. Например, одной из распространенных задач, где применяются эти средства, являются бандлинг и минификация, которые
позволяют минимизировать все используемые скрипты и стили, что позволит оптимизировать работу веб-приложения. В ASP.NET Core подобные задачи выполняются во время
разработки.

Бандлинг и минификация

У нас в проекте может быть множество файлов скриптов, стилей. Однако чем больше разных скриптов и стилей подключено на веб-странице, тем больше запросов надо совершить браузеру, а
серверу обработать. Что увеличивает нагрузку на сервер.

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

Для решения этих проблем применяются два механизма: бандлинг и минификация.

Бандлинг представляет соединение скриптов или стилей в один общий файл или бандл.

Минификация представляет сокращение содержимого скриптов или стилей.

Для проведения бандлинга и минификации в веб-разработке могут применяться самые различные утилиты, инструменты, например, Grunt, Gulp. Но рекомендуемым способом именно
по отношению к ASP.NET Core является использование расширения Visual Studio — BundlerMinifier.

Для работы с BundlerMinifier нам надо загрузить и установить данное расширение по
ссылке.

Конфигурация BundlerMinifier

Конфигурация BundlerMinifier задается с помощью файла bundleconfig.json. Он определяется в в следующем формате:


[
  {
	 // настройки 1-го бандла
  },
  {
    // настройки 2-го бандла
  },
  {
    // настройки n-го бандла
  }
]

Фактически файл определяет массив бандлов. Для настройки каждого отдельного бандла применяется ряд опций:


{
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/site.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
}

Параметр outputFileName задает путь выходного файла, который будет формироваться в результате объединения файлов.

Параметр inputFiles определяет через запятую набор файлов, которые будут объединяться. То есть в данном случае из файла «wwwroot/js/site.js»
будет формироваться файл «wwwroot/js/site.min.js»

Дополнительный параметр minify указывает, будут ли минифицироваться включаемые в бандл файлы. Значение enabled: true включает минификацию.
А значение "renameLocals": true позволяет сократить имена локальных переменных.

Последний параметр sourceMap указывает, надо ли генерировать файл-карту сопоставления исходного и выходного файлов.

Применение BundlerMinifier

Создадим новый проект ASP.NET Core по типу ASP.NET Core Web App (Model-View-Controller). Для работы с BundlerMinifier добавим в проект ряд дополнительных стилей и скриптов:

Допустим, в папке wwwroot/css будут два файла стилей: site.css и style2.css. А в папке wwwroot/js — site.js, site2.js, site3.js.

Также добавим в проект файл bundleconfig.json (если он отсутствует в проекте). Затем изменим его следующим образом:


[
  {
    "outputFileName": "wwwroot/css/bundle.css",
    "inputFiles": [
      "wwwroot/css/site.css",
      "wwwroot/css/site2.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundle.js",
    "inputFiles": [
      "wwwroot/js/site.js",
      "wwwroot/js/site2.js",
      "wwwroot/js/site3.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    }
  }
]

Также надо отметить, что нам необязательно исправлять файл вручную. Мы можем также выделить все нужные элементы, нажать на выделенный элемент правой кнопкой мыши и
в контекстном меню выбрать пункт Bundler & Minifier -> Bundle and Minify Files:

После выбора этой опции в диалоговом окне надо будет ввести расположение для выходного файла, в который будет собираться бандл. По умолчанию дается имя bundle.js, как указано
в файле bundleconfig.json, но его можно изменить.

После этого в папке с js-скриптами появятся новые файлы — полная и минимизированная версия файла bundle.js, который объединяется все скрипты.

Теперь перейдем в меню View -> Other Windows -> Task Runner Explorer. После этого внизу Visual Studio откроется окно
Task Runner Explorer. В этом окне нажмем правой кнопкой мыши на пункт Update all files:

При открытии контекстого меню нам надо установить привязку с помощью пункта Binding. Здесь имеются четыре типа привязки:

  • Before Build: бандлы будут собираться перед построением проекта

  • After Build: бандлы будут собираться после построения проекта

  • Clean: бандлы будут собираться при очистке проекта

  • Project Open: бандлы будут собираться при открытии проекта

К примеру выберем опцию Before Build. И далее мы сможем использовать бандлы, подключив стандартным образом:


<link rel="stylesheet" href="~/css/bundle.min.css" />
<script src="~/js/bundle.min.js"></script>

Причем не важно, что на данный момент нет таких файлов. Они будут формироваться автоматически при каждом построении проекта.

Стоит отметить, что скрипты и стили не обязательно должны располагаться в каталоге wwwroot. Например, мы можем дополнительно определить в проекте
специальную папку, например, назовем ее static, и расположить их в этой папке. А бандлы формировать и подключать из wwwroot:

В этом случае мы могли бы настроить файл bundleconfig.json следующим образом:


[
  {
    "outputFileName": "wwwroot/css/bundle.css",
    "inputFiles": [
      "static/css/*.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundle.js",
    "inputFiles": [
      "static/js/*.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    }
  }
]


«Захват JS Bundle» Чудовищно медленно Oh! Android

Я решил это, НЕ используя adb, чтобы отменить мой TCP-порт 8081.

ОБНОВЛЕНИЕ 2: Я думал, что решил это, используя свое общедоступное имя IP / хоста, но оказывается, что react-native run-android создает повторно adb reverse каждый раз, когда вы его выполняете. См. UPDATE 1 внизу для соответствующих ссылок.

ОРИГИНАЛ:

Когда я изначально установил свою машину для React Native, я выполнил следующую команду, чтобы приложение React взаимодействовало с React Packager: adb reverse tcp:8081 tcp:8081 . Я заметил, что каждый раз, когда я react-native run-android на основе react-native run-android , мой эмулятор будет оставаться на «Fetching JS Bundle в течение длительного времени».

Чтобы устранить проблему с эмулятором в Windows:

  1. Войдите в меню разработчика (в приложении, в эмуляторе), имитируя дрожание устройства. Открыть Additional Tools -> Accelerometer и нажмите Воспроизвести в нижней части окна, внизу Recorded data: shake .

  2. Нажмите « Dev Settings (последний пункт меню).

  3. Нажмите « Debug server host & port for device и установите значение для public IP/Name:Port моего ПК в сети. (Например, devpc.mynet.local:8081 или 192.168.1.99:8081 ).

  4. Закройте приложение для реагирования.

  5. Запустите adb reverse --remove-all чтобы отменить мою предыдущую команду adb reverse tcp:8081...

  6. Перезагрузите все, начиная с моего компьютера, запустив react-native run-android . Обратите внимание, что на этот раз шаг Fetching JS Bundle выполняется почти сразу.

Я только что нашел это решение для своей собственной среды. Я не пробовал его на каких-либо реальных устройствах. Кроме того, мне интересно, есть ли способ указать это из кода, чтобы он работал правильно в первый раз (вместо того, чтобы указывать публичный IP / имя моего компьютера, запустив приложение на устройстве и установив его в настройках Dev там…)

Официальная документация:

ОБНОВЛЕНИЕ 1: Ниже приведено некоторое релевантное чтение в отношении настройки debug_http_host устройства debug_http_host .

  • Проблема 2727 с возможным обходным путем – настройка через код
  • Проблема 1429 с конкретным обходом IOS
  • Вытяните запрос 1546, который должен был сделать эту конфигурацию, но никогда не принимался
  • Жалобы о продуктах, чтобы сделать эту конфигурацию

Провел несколько дней, пытаясь увеличить скорость этого эмулятора и, наконец, получил все, что работает очень быстро и плавно.

У вас должна быть последняя версия узла. Если он устарел, он будет чудовищно медленным.

Теперь, если вам нужно закрыть сервер узлов и перезапустить «реагировать на собственный запуск андроида» после каждого небольшого изменения, которое вы делаете, ваш «наблюдатель файлов» никогда не будет установлен. Чтобы запустить загрузчик файлов, вы должны: (1) отредактировать файл yourAwesomeApp \ node_modules \ react-native \ packager \ react-packager \ src \ node-haste \ FileWatcher \ index.js (2) и изменить MAX_WAIT_TIME на Большее значение (например, 600000). Узел будет ждать, пока файловый менеджер начнет работу за это время, поэтому, если значение слишком мало, узел просто проскакивает через него и продолжает извлекать пакет. Когда файл наблюдателя идет, вы можете просто дважды нажать R, чтобы перезагрузить небольшие изменения в код, который вы делаете.

Теперь вам нужно будет увидеть все ваши console.log (). Чтобы сделать это в Genymotion (эмулятор, который я рекомендую, даже бесплатное), нажмите ctrl M с запущенным приложением и нажмите «Отладка JS удаленно». Это откроет вкладку в вашем веб-браузере ( http: // localhost: 8081 / debugger-ui ). Осмотрите эту страницу, чтобы открыть консоль!

javascript — Зачем и где вообще нам нужен bundle.js?

Откуда бандлинг?

Мы начали объединять наши активы в пакеты из соображений производительности.

  • HTTP1 поддерживает ограниченное количество запросов в одном соединении. Создание соединений для каждого актива убивало производительность.
  • Мы начали объединять вещи постранично, чтобы повысить производительность за счет более эффективного кэширования.
  • Нам удалось добавить к нему отпечаток пальца и загрузить его в CDN.(домашняя страница.231434.js). Итак, мы смогли развернуть наше приложение, добавив его в докер.
  • Bundling также помогает нам еще больше уменьшить размер страницы, потому что сборщик знает всю систему. Это означает, что он может удалить неиспользуемые вещи и упростить минимизацию. Вы не можете обойтись без упаковщика.
  • Также упаковщики используют транспилеры. Браузеры не всегда могут запускать коды, которые мы пишем, например, Typescript, CoffeeScript. Составители пакетов могут легко преобразовывать эти коды в пакеты.

Это еще нужно?

В настоящее время многое меняется, как мы объединяем наши активы.

  • Во-первых, почти все браузеры теперь поддерживают HTTP / 2. Таким образом, мы можем запросить несколько файлов по одному и тому же соединению. Объединение из-за этого больше не требуется. Также у нас есть HTTP / 2 server push.
  • Библиотеки, такие как React, Angular, Vue, намного эффективнее по размеру. Их можно легко загрузить на страницу из источника, поддерживающего gzip.

Это причины, по которым нам больше не нужна комплектация.

Но, исходя из вашего проекта, нам может понадобиться комплектация.Это настоящая правда.

Я бы еще пошел с комплектацией.


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

Так что в настоящее время он основан только на вашем проекте. Больше нет особых причин для производительности.

пакет-js · GitHub

Пакет JS минимальной конфигурации с батареями

Гипотетический сборщик JavaScript . bundle-js призван быть вашим универсальным магазином для всего, что есть во внешнем интерфейсе JS. Голы:

  • Батареи в комплекте: у вас должна быть возможность использовать bundle-js без каких-либо плагинов или какой-либо сложной конфигурации.
  • Соглашение о конфигурации: не должно быть необходимости в настройке bundle-js.
  • Одна зависимость: больше не нужно иметь дело с webpack, загрузчиками, babel, пресетами babel, надстройками babel и т. Д.!
  • Расширяемый: при необходимости все еще можно расширить функциональность.

На основе Rollup + Buble.

Использование

Использование CLI: Вы можете легко связать код с CLI. Это также перенесет все ES2015 +, React и так далее.Конечным результатом будет пакет Common.js.

 пакет-js index.js -o bundle.js
# дает вам bundle.js и bundle.js.map 

Использование JS: Можно использовать программно.

 константный пакет = требуется ('пакет-js')

// один проход
пакет ('index.js')
.then (результат => {
  result.code
  result.map
}) 

Использование в Node.js

bundle-js также позволяет писать ES6 на Node. (Это похоже на то, что выходит за рамки, но все же находится в пределах территории «единого окна для es6»!)

Это переносит все из src / в lib / :

 пакет-js --no-bundle src lib 

Функции по умолчанию

  • ES2015! (накопительный плагин-буфер)
  • Полезные дополнения ESnext, например {...spread}
  • React JSX
  • Поддержка CommonJS (rollup-plugin-commonjs)
  • Сжатие с помощью --compress (rollup-plugin-uglifyjs)

Конфигурация

Доступны следующие флаги CLI:

 Параметры пакета: (накопительный пакет)
  -f, --format cjs bundle как модуль CommonJS
  -f, --format amd bundle как модуль AMD
  -f, --format umd bundle как UMD Bundle (для браузеров)
      --module-name ИМЯ имя модуля

  -u, --umd ИМЯ то же, что и `--format umd --module-name NAME`

      --compress сжать конечный результат
      --no-bundle только transpile (не связывать)

Варианты транспиляции: (бакл.)
      --jsx прагма PRAGMA
      --target БРАУЗЕРЫ нацелены на определенные браузеры (--target [--chrome 48 --firefox 21])

Другие варианты:
      - смотреть, работать постоянно и восстанавливать при любых изменениях 

Вы также можете добавить их в пакет .json . Эта конфигурация такая же, как конфигурация CLI.

 / * package.json * /
"bundle-js": {
  // некоторые параметры передаются в buble
  "jsx": "decca.element",
  "target": {"chrome": 48},

  // некоторые параметры передаются в свертку
  "globals": {
    "backbone": "Магистраль"
  }
} 

Плагины

Это плохая идея. Впереди дырявые абстракции. Плагины

Rollup используются автоматически. Просто добавьте их в package.json .

 npm install --save-dev rollup-plugin-json 

Идеальных пакетов для использования:

  • rollup-plugin-json — загрузить json
  • rollup-plugin-node-globals — поддержка процесса
  • rollup-plugin-css-module — поддержка модулей CSS
  • rollup-plugin-es3 — вывод кода, совместимого с устаревшим браузером
  • rollup-plugin-alias — псевдонимы

Вы можете настроить их так (хотя для большинства плагинов в этом нет необходимости):

 / * упаковка.json * /
"bundle-js": {
  "rollup-plugin-alias": {
    "лево право"
  }
} 

Выталкивание

Выходит из пакета bundle-js? Спуститесь на уровень абстракции. Это создает rollup-config.js с соответствующей конфигурацией накопления.

  пакет-js --eject> rollup-config.js
  

См. Пример вывода

 // Инструкции:
//
// 1. Сохраните этот файл как rollup.config.js.
// 2. Измените пакеты npm (см. Ниже).
//
// удаление npm --save bundle-js
// npm install --save rollup buble rollup-plugin-buble rollup-plugin-commonjs
//
// 3.Запустить накопительный пакет:
//
// ./node_modules/.bin/rollup -c rollup-config.js input.js -o output.js

импортировать buble из 'rollup-plugin-buble'
импортировать cjs из 'rollup-plugin-commonjs'

const bubleOptions = {
  цель: {chrome: 24}
}

экспорт по умолчанию {
  запись: 'index.js',
  формат: 'cjs',
  плагины: [cjs (), buble (bubleOptions)]
} 

Как связать простой статический сайт с помощью Webpack

Webpack зарекомендовал себя как незаменимая часть инструментальной цепочки JavaScript. Он имеет более 55000 звезд на GitHub и используется многими крупными игроками в мире JavaScript, такими как React и Angular.

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

В этой статье я покажу вам, как установить и настроить webpack, а затем использовать его для создания миниатюрных пакетов для простого статического сайта с несколькими ресурсами.

Но зачем вам это делать?

Хороший вопрос.Рад, что ты спросил!

Одна из причин для этого — свести к минимуму количество HTTP-запросов, которые вы отправляете серверу. По мере роста средней веб-страницы вы, вероятно, будете включать jQuery (да, он по-прежнему популярен в 2020 году), пару шрифтов, несколько плагинов, а также различные таблицы стилей и немного собственного JavaScript. Если вы отправляете сетевой запрос для каждого из этих ресурсов, скоро все сложится, и ваша страница может стать вялой. Объединение вашего кода может в некоторой степени смягчить эту проблему.

Webpack также упрощает минимизацию кода, дополнительно уменьшая его размер, и позволяет писать ресурсы в любом желаемом вкусе. Например, в этой статье я продемонстрирую, как с помощью webpack преобразовать современный JavaScript в ES5. Это означает, что вы можете написать JavaScript, используя самый последний, самый современный синтаксис (хотя он может еще не полностью поддерживаться), а затем обслуживать браузеры ES5, которые будут работать почти везде.

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

Начало работы

Первое, что вам понадобится, это установить на вашем компьютере Node и npm. Если у вас еще нет Node, вы можете либо загрузить его с веб-сайта Node, либо загрузить и установить с помощью диспетчера версий. Лично я предпочитаю этот второй метод, так как он позволяет вам переключаться между несколькими версиями Node и сводит на нет множество ошибок разрешений, которые в противном случае могли бы привести к установке пакетов Node с правами администратора.

Нам также понадобится скелетный проект для работы. Вот один, который я сделал ранее. Чтобы запустить его на вашем компьютере, вы должны клонировать проект из GitHub и установить зависимости:

  git clone https://github.com/sitepoint-editors/webpack-static-site-example
cd webpack-статический-сайт-пример
npm install
  

Это установит jQuery, а также Slick Slider и Lightbox2 — два плагина, которые мы будем использовать на сайте — в папку node_modules в корне проекта.

После этого вы можете открыть index.html в своем браузере и перемещаться по сайту. Вы должны увидеть что-то вроде этого:

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

Знакомство с Webpack в проекте

Следующее, что нам нужно сделать, это установить webpack. Мы можем сделать это с помощью следующей команды:

  npm установить webpack webpack-cli --save-dev
  

Это установит webpack и интерфейс командной строки webpack и добавит их в раздел devDependency вашего пакета .4.0.0 "
}

Затем мы создадим папку dist , которая будет содержать наш связанный JavaScript:

  мкдир р-н
  

Теперь мы можем попробовать запустить webpack из командной строки, чтобы убедиться, что он настроен правильно:

  ./node_modules/webpack/bin/webpack.js ./src/js/main.js --output-filename = bundle.js --mode = development
  

Мы говорим webpack объединить содержимое src / js / main.js в dist / bundle.js . Если все установлено правильно, вы должны увидеть что-то вроде этого вывода в командной строке:

  asset bundle.js 1,04 КБ [выпущено] (имя: основной)
./src/js/main.js 192 байта [построено] [сгенерировано кодом]
webpack 5.1.3 успешно скомпилирован за 45 мс
  

И webpack создаст файл bundle.js в папке dist . Если вы посмотрите этот файл в выбранном текстовом редакторе, вы увидите набор шаблонов и содержимое main.js внизу.

Автоматизация нашей установки

Если бы нам приходилось вводить все вышеперечисленное в терминал каждый раз, когда мы хотели запустить webpack, это было бы довольно неприятно. Итак, давайте создадим сценарий npm, который мы можем запустить вместо него.

В package.json измените свойство scripts , чтобы оно выглядело так:

  "скрипты": {
  "test": "echo \" Ошибка: тест не указан \ "&& exit 1",
  "build": "webpack ./src/js/main.js --output-filename = bundle.js --mode = development "
},
  

Обратите внимание, как мы можем не указывать полный путь к модулю webpack, поскольку при запуске из сценария npm автоматически ищет модуль в папке node_modules . Теперь, когда вы запустите npm run build , должно произойти то же, что и раньше. Круто, а?

Создание файла конфигурации Webpack

Обратите внимание, как мы передаем путь к файлу в пакет и путь к выходному файлу в качестве аргументов в webpack? Что ж, нам, вероятно, следует изменить это и вместо этого указать их в файле конфигурации.Это облегчит нашу жизнь, когда мы позже перейдем к загрузчикам.

Создайте файл webpack.config.js в корне проекта:

  сенсорный webpack.config.js
  

И добавьте следующий код:

  module.exports = {
  запись: './src/js/main.js',
  режим: 'разработка',
  выход: {
путь: `$ {__ dirname} / dist`,
имя файла: 'bundle.js',
  },
};
  

И измените сценарий npm на следующий:

  "скрипты": {
  ...
  "build": "webpack"
},
  

В webpack.config.js мы экспортируем объект конфигурации, который указывает точку входа, режим, в котором должен работать веб-пакет (подробнее об этом позже), и место вывода пакета. Запустите все снова, и все должно работать как раньше.

В комплекте

Теперь, когда у нас есть webpack, генерирующий для нас бандл, следующее, что нам нужно сделать, это включить его куда-нибудь. Но сначала давайте создадим другую точку входа, чтобы мы могли перечислить ресурсы, которые мы хотим, чтобы Webpack собирал для нас.Это будет файл с именем app.js в каталоге src / js :

  сенсорный src / js / app.js
  

Добавьте следующее в app.js :

  требуется ('./ main.js');
  

И измените конфигурацию webpack таким образом:

  запись: './src/js/app.js',
  

Запустите npm, запустите сборку еще раз, чтобы воссоздать пакет. Все должно работать как раньше.

Теперь, если вы посмотрите на индекс .html вы заметите, что с точки зрения JavaScript не так много. Внизу файла мы включаем jQuery и файл с именем main.js , который отвечает за отображение дополнительной информации при нажатии ссылки Подробнее… .

Давайте отредактируем index.html , чтобы включить пакет вместо main.js . Посмотрите внизу файла. Вы должны увидеть:

  
<скрипт src = "./src/js/main.js "> 
  

  

Измените это на:

  

  

  

Обновите страницу в браузере и убедитесь, что ссылка Подробнее… все еще работает.

Объединение jQuery

Теперь давайте добавим в пакет jQuery. Это уменьшит количество HTTP-запросов, которые делает страница.Для этого нам нужно изменить файл app.js следующим образом:

  окно. $ = Require ('jquery');
требуется ('./ main.js');
  

Здесь нам требуется jQuery, но поскольку мы установили его с помощью npm, нам не нужно указывать полный путь. Мы также добавляем его обычный псевдоним $ к глобальному объекту window , чтобы он был доступен другим скриптам. Нам требуется main.js после jQuery, поскольку первое зависит от второго и порядок важен.

Измените index.html , чтобы удалить тег сценария jQuery:

  
  

  

Запустите npm, запустите сборку и еще раз обновите страницу в браузере, чтобы убедиться, что ссылка Подробнее… все еще работает. Оно делает? Хороший!

Измерение нашего прогресса

Можно говорить о производительности, но это мало что значит, если вы не установите какой-то измеримый показатель.В нашем случае мы пытаемся уменьшить количество HTTP-запросов, которые делает браузер, и можем просматривать их в инструментах разработчика браузера. Я буду использовать Chrome в качестве примера того, как это сделать, но принцип тот же для любого современного браузера.

Нажмите клавишу F12 , чтобы открыть инструменты разработчика, затем убедитесь, что выбрана вкладка Network . Затем нажмите и удерживайте символ перезагрузки рядом с адресной строкой (кружок со стрелкой) и выберите Empty Cache и Hard Reload .Вы должны увидеть что-то похожее на изображение ниже.

Как вы можете видеть на панели в нижней части окна, выполняется восемь запросов (мы уже сократили один, добавив jQuery в наш пакет), и в общей сложности 557 КБ передаются по сети.

Объединение CSS

Если посмотреть на index.html , единственное, для чего мы делаем сетевой запрос, — это CSS. Как видите, мы включаем main.css вверху страницы, и этот файл, в свою очередь, импортирует еще четыре файла CSS.

Хотя в своей стандартной конфигурации webpack может работать только с JavaScript, мы можем использовать так называемый загрузчик, чтобы он также связал наш CSS. Из документов webpack:

Загрузчики — это преобразования, которые применяются к исходному коду модуля. Они позволяют предварительно обрабатывать файлы, когда вы импортируете или «загружаете» их. Таким образом, загрузчики подобны «задачам» в других инструментах сборки и обеспечивают мощный способ обработки этапов сборки интерфейса. Загрузчики могут преобразовывать файлы с другого языка (например, TypeScript) в JavaScript или загружать встроенные изображения как URL-адреса данных.Загрузчики даже позволяют вам делать такие вещи, как , импортировать CSS-файлы прямо из ваших модулей JavaScript!

Итак, давайте изменим app.js :

 
require ('../ css / main.css');


window. $ = require ('jquery');
требуется ('./ main.js');
  

И нам нужно изменить webpack.config.js , чтобы указать ему, какой загрузчик запускать, когда он встречает файл, заканчивающийся на .css :

  module.exports = {
  ...
  модуль: {
правила: [
{
тестовое задание: /\.css $ /,
использовать: [
'загрузчик стилей',
'css-loader',
],
},
],
  },
};
  

Как видите, я указал два загрузчика: css-loader и style-loader. Из этих двух css-loader преобразует CSS в модуль JavaScript, а style-loader вставляет CSS, экспортированный модулем JavaScript, в тег