Автор оригинала: Steve Belovarich.
Инструменты, как Брасифицировать и WebPack Были достаточно популярны среди инженеров пользовательских интернет-пользователей, чтобы объединить их исходный код. Роллап Это довольно новое – и, честно говоря, дыхание свежего воздуха после перемещения моего углового уровня 2 исходного кода из альфа до RC. По пути я попробовал каждый возможным внесением стабильной среды разработки и производства от использования Gulp, SystemJS, JSPM, угловой CLI, а затем WebPack и теперь свернут.
В этой статье я поделился своими выводами и проводим вас через проект запуска, который я построил. Надеюсь, другие могут видеть преимущества пакета с роутом.
Клон Angular2-Rollup Репозиторий, чтобы получить код, описанный в этой статье. Следуйте инструкциям в Readme этого хранилища для получения среды разработки и запуска. Оптимизированная связка, который создает роллеп, может отрицать необходимость ленивой нагрузки; В зависимости от масштаба вашего приложения.
Rollup имеет много преимуществ
Я мог отвлечься в плюсы и минусы всех этих вариантов, но это, вероятно, является другой статьей само по себе. Этот пост посвящен вставать и бегать с рулоном. Но сначала давайте найму на мгновение сосредоточиться на некоторых преимуществах свертывания соревнований.
- Пакет легче читать, чем браурифицировать и WebPack, который пригодится для отладки в браузере
- Rollup использует процесс, называемый деревом встряхивая, что приводит к высокооптимированному расслоению
- Настройте пакет с минимальным кодом, написанным в ES2015.
- Окружающая среда для разработки близка к зеркальным производственным средам
- Угловой 2 рулонного плагина поддерживает встроенные CSS и HTML
Есть некоторые недостатки
- NGModule не может быть ленивым, вырванным из коробки
- Нехватка документации
До сих пор не поддерживает расщепление кода, что необходимо использовать ленивую загрузку NGModule
найдено в угловых 2 RC5 и выше. Как написать эту статью, Проблема открыта на репозитории Rollup Github. Мы можем увидеть эту функцию в более позднем выпуске ролака или, возможно, через плагин, построенный сообществом развития.
Встряхнуть это дерево
Самое большое преимущество использования Rollup против соревнований – встряхивание деревьев. Встряхивание деревьев означает, что исключая неиспользуемые части вашей кодовой базы из пучка. Дерево-встряхивание работает только с модулями ES2015, потому что контент статичен. Модули ES5 часто имеют переключение API и содержание, что делает их действительно трудно дерево встряхнуть. До тех пор, пока код написан в ES2015, он может быть деревом, встряхивая рулетом, и все неиспользуемые части кодовой базы выпадаются из пучка. Для производственной среды вы также можете использовать инструменты, такие как UGLIFY, чтобы добывать и оптимизировать пакет еще больше. @ Угловой/компилятор-CLI
Также предоставляет возможность предварительно предложить ваше приложение вместо в браузере, что приводит к еще меньшему пакету, потому что теперь вам не нужно упаковать компилятор с вашим кодом. Вы можете узнать больше о NGC здесь Отказ
Обратитесь!
Роллап создает высокооптимизированные пакеты через процесс встряхивания деревьев.
TS/ES2015 => Tree Shaking => ES2015 Bundle
Затем мы можем использовать любой инструмент для транситирования пучка ES2015. Многие угловые 2 инженера используют Tymdercript транпировать, так что давайте добавим его в процесс:
TS/ES2015 => Tree Shaking => ES2015 Bundle => tsc => ES5 / ES3
Этот процесс приводит к высокооптимированному комплекту. Когда я ухудшил код, который Typeycript транслирован на ES5, размер файла сократился еще 50%. Гзапирование заминированного пакета привело к файлу 28 КБ! Удивительно, что это приложение может стать еще меньше, представляя угловой компилятор.
Rollup Bundle 310kb => Uglify 135kb => gzip 28kb
Результаты могут варьироваться для вашего исходного кода, но я не был бы удивлен, если вы видите падение размера файла для Bundle Very WebPack.
Как начать с скат
В этом примере мы собираемся отделить конфигурацию Rollup в два файла: один для поставщика кода и другой для углового источника приложения. Результат работы Роллап
В командной строке будут два пакета: Vendor.js
и bundle.js
Отказ
Строительный код продавца
Вот как выглядит то, как выглядит файл конфигурации поставщика. Этот файл должен быть размещен в корневом каталоге проекта. Пояснение ниже.
// rollup.config.vendor.js import alias from 'rollup-plugin-alias'; import typescript from 'rollup-plugin-typescript'; import resolve from 'rollup-plugin-node-resolve'; export default { entry: 'src/vendor.ts', dest: 'dist/vendor.es2015.js', format: 'iife', moduleName: 'vendor', plugins: [ typescript(), alias({ rxjs: __dirname + '/node_modules/rxjs-es' }), resolve({ jsnext: true, main: true, browser: true }), ] }
В первых нескольких линиях Rollup.config.vendor.js
Мы импортируем три плагина, которые устанавливаются через NPM. Rollup полагается на сообщество разработчика, чтобы сделать плагины Отказ
Plotup-плагин-псевдоним
Позволяет вам псевдоним модулей из одного модуля на другой. Это один из способов борьбы с проблемой ссылки на ссылку на код ES5 в вашем коде TS или ES6.псевдоним ()
называется вМассив плагинов
позже в файле. Мы используем его на псевдоним версии RXJS ES2015 на все ссылки RXJS в нашем проекте.Plotup-Plugin-Tymdercript
Плагин позволяет свертывать на анализ TyerkScript Code.Rollupp-плагин-узел-узел
позволяет прокатировать, чтобы найти модули с использованием алгоритма разрешения узла, для использования сторонних модулей вnode_modules
Отказ
Обратите внимание на экспорт конфигурации на Объект
который содержит фактическую конфигурацию. Это Объект
имеет три важных свойства:
entry: 'src/vendor.ts', dest: 'dist/vendor.es2015.js', format: 'iife'
Вход
равно Строка
Это представляет путь к максимальной самой начальной точке нашего дерева кода, мы хотим свернуть на совокупность в комплект. Точка входа этого поставщика Config на самом деле плоская. Но когда мы пишем конфигурацию для нашего исходного кода нашего приложения, точка входа будет .ts
Файл, который загрузит наше приложение, которое находится в верхней части дерева компонентов.
dest
Это путь к каталогу, в котором мы хотим, чтобы пучок компилировал наряду с именем файла пучка ES2015, который будет создан. Файл будет забрать TSC
и транспортирован до ES5 по Typescript. Vendor.es2015.js
можно рассматривать как временный файл и, вероятно, должен быть .гипитана
Отказ
Формат
Пакета в этом случае будет немедленно вызываемая функциональная экспрессия или IIFE
Отказ
Idife.
Использование IIFE имеет несколько преимуществ и некоторых побочных эффектов, когда свертывание может найти зависимость, которая ссылается в исходном коде. Скатал будет принимать зависимость и находится на окно
Затем введите его в IIFE. Это только одна из причин, чтобы быть явным при определении ваших зависимостей с помощью свертывания, но и спасатель, если нам приходится жесткий код зависимости поставщика в Тег
по какой-то причине.
Точка входа
В фактическом Vendor.ts
Файл, используемый в качестве точки входа для Vendor.es2015.js
Мы видим, что зависимости ES2015, общие для угловых 2 разработки, импортируются и экспортируются.
// vendor.ts import * as _angular_common from '@angular/common'; import * as _angular_compiler from '@angular/compiler'; import * as _angular_core from '@angular/core'; import * as _angular_http from '@angular/http'; import * as _angular_platformBrowser from '@angular/platform-browser'; import * as _angular_platformBrowserDynamic from '@angular/platform-browser-dynamic'; import * as _angular_router from '@angular/router'; import * as _angular_forms from '@angular/forms'; export default { _angular_common, _angular_compiler, _angular_core, _angular_http, _angular_platformBrowser, _angular_platformBrowserDynamic, _angular_router, _angular_forms };
Чтобы сделать ролл создать пакет, запустите следующее в командной строке:
rollup -c rollup.config.vendor.js
Затем используйте TypeScript для транситирования пучка от ES2015 до ES5 для браузера.
tsc --out ./dist/vendor.js --target es5 --allowJs dist/vendor.es2015.js
Теперь вы должны увидеть Vendor.ts
Файл в /dist
папка.
Примечание. У репозитария есть несколько ярлыков для создания стартового кода, посмотрите в Package.json
Для всех команд CLI.
Содержание исходного кода приложения
Rollup.config.ts
КОНФИГУРАЦИЯ ПО ИСЧИСТКОМ КОДЕ ИСПОЛЬЗОВАНИЯ, найденном в /SRC
папка. Формат этого файла такой же, как Rollup.config.vendor.ts
С несколькими дополнительными параметрами на экспортированном Объект
Отказ
//rollup.config.ts import alias from 'rollup-plugin-alias'; import resolve from 'rollup-plugin-node-resolve'; import typescript from 'rollup-plugin-typescript'; import angular from 'rollup-plugin-angular'; export default { entry: 'src/main.ts', format: 'iife', dest: 'dist/bundle.es2015.js', sourceMap: true, plugins: [ angular(), typescript(), alias({ rxjs: __dirname + '/node_modules/rxjs-es' }), resolve({ jsnext: true, main: true, browser: true }) ], external: [ '@angular/core', '@angular/common', '@angular/compiler', '@angular/core', '@angular/http', '@angular/platform-browser', '@angular/platform-browser-dynamic', '@angular/router', '@angular/router-deprecated' ], globals: { '@angular/common' : 'vendor._angular_common', '@angular/compiler' : 'vendor._angular_compiler', '@angular/core' : 'vendor._angular_core', '@angular/http' : 'vendor._angular_http', '@angular/platform-browser' : 'vendor._angular_platformBrowser', '@angular/platform-browser-dynamic' : 'vendor._angular_platformBrowserDynamic', '@angular/router' : 'vendor._angular_router', '@angular/forms' : 'vendor._angular_forms' } }
Мы добавили Рулон-плагин-угловой
Плагин к этому конфигурации, который обрабатывает встроить все .html
и .css
В @Component
В нашем угловом 2 исходном коде. Это значит в каждом @Component, вы не должны быть принуждены в том числе
Moduleid: Module.id виден с SystemJS.
Мы также добавили два новых свойства на конфигурацию Rollup: внешний
и глобал
Отказ Оба являются Массивы
Строки
Отказ внешний
это список всех модулей поставщиков, в то время как глобал
Карты имен модулей, где зависимость находится через свойства Vendor.js
Отказ
Точка входа для этого конфигурации ( SRC/Main.ts
) выглядит как типичный вызов для загрузки, так как синтаксис написан в RC5 во время написания этого поста.
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; import { enableProdMode } from '@angular/core'; platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err));
Для этой конфигурации давайте комбинируем команды Rollup и TSC.
rollup -c rollup.config.js && tsc --out ./dist/bundle.js --target es5 --allowJs dist/bundle.es2015.js
Когда Rollup и TSC Run, bundle.js
будет выводиться на /dist
каталог.
Чтобы обработать другие файлы приложений, все, что вам нужно, это небольшая организация. Одна конвенция - использовать /публики
каталог. Я написал короткий сценарий NPM, который копирует все файлы из /src/public
к /dist
Отказ Один из файлов, которые копируются в корню /dist
от /src/public
это index.html
Отказ
App Loading... Обратите внимание, как Reflect.js and zone.js включены в