Я пытаюсь обобщить свои знания о самых популярных менеджерах пакетов JavaScript, пакетах и исполнителях задач. Пожалуйста, поправьте меня, если я ошибаюсь:
npm
&bower
являются менеджерами пакетов. Они просто скачивают зависимости и не знают, как создавать проекты самостоятельно. То , что они знают , что это вызовwebpack
/gulp
/grunt
после загрузки всех зависимостей.bower
это какnpm
, но строит сплющенные деревья зависимостей (в отличие от того,npm
что делает это рекурсивно). Значениеnpm
извлекает зависимости для каждой зависимости (может извлекать то же самое несколько раз), в то время какbower
вы ожидаете , что вы вручную включите под-зависимости. Иногдаbower
иnpm
используются вместе для front-end и back-end соответственно (поскольку каждый мегабайт может иметь значение во front-end).grunt
иgulp
являются организаторами задач для автоматизации всего, что может быть автоматизировано (т. е. компилировать CSS / Sass, оптимизировать изображения, создавать пакет и минимизировать / переносить его).grunt
противgulp
(это какmaven
противgradle
или конфигурации против кода). Grunt основан на настройке отдельных независимых задач, каждая задача открывает / обрабатывает / закрывает файл. Gulp требует меньше кода и основан на потоках Node, что позволяет ему создавать цепочки конвейеров (без повторного открытия одного и того же файла) и ускоряет его.webpack
(webpack-dev-server
) - для меня это бегун задач с горячей перезагрузкой изменений, который позволяет забыть обо всех наблюдателях JS / CSS.npm
/bower
+ плагины могут заменить исполнителей задач. Их способности часто пересекаются, поэтому есть разные последствия, если вам нужно использоватьgulp
/grunt
болееnpm
+ плагины. Но исполнители задач определенно лучше подходят для сложных задач (например, «на каждой сборке создайте пакет, перенесите его с ES6 на ES5, запустите его во всех эмуляторах браузеров, сделайте снимки экрана и разверните в Dropbox через ftp»).browserify
позволяет упаковывать модули узлов для браузеров.browserify
vsnode
'srequire
на самом деле AMD против CommonJS .
Вопросов:
- Что такое
webpack
&webpack-dev-server
? Официальная документация гласит, что это пакет модулей, но для меня это просто бегун задач. Какая разница? - Где бы вы использовали
browserify
? Разве мы не можем сделать то же самое с импортом узла / ES6? - Когда вы будете использовать
gulp
/grunt
болееnpm
+ плагины? - Пожалуйста, приведите примеры, когда вам нужно использовать комбинацию
Ответы:
Webpack и Browserify
Webpack и Browserify выполняют почти одинаковую работу, обрабатывая ваш код для использования в целевой среде (в основном в браузере, хотя вы можете ориентироваться и на другие среды, такие как Node). Результатом такой обработки является один или несколько пакетов - собранные сценарии, подходящие для целевой среды.
Например, предположим, что вы написали код ES6, разделенный на модули, и хотите иметь возможность запускать его в браузере. Если эти модули являются модулями Node, браузер их не поймет, поскольку они существуют только в среде Node. Модули ES6 также не будут работать в старых браузерах, таких как IE11. Более того, вы, возможно, использовали экспериментальные языковые функции (следующие предложения ES), которые еще не реализованы в браузерах, поэтому запуск такого сценария просто вызовет ошибки. Такие инструменты, как Webpack и Browserify, решают эти проблемы путем перевода такого кода в форму, которую может выполнить браузер . Кроме того, они позволяют применять огромное количество оптимизаций к этим пакетам.
Тем не менее, Webpack и Browserify отличаются во многих отношениях, Webpack предлагает множество инструментов по умолчанию (например, разделение кода), в то время как Browserify может сделать это только после загрузки плагинов, но использование обоих приводит к очень похожим результатам . Все сводится к личным предпочтениям (Webpack моднее). Кстати, Webpack не запускает задачи, это просто процессор ваших файлов (он обрабатывает их так называемыми загрузчиками и плагинами), и он может запускаться (среди прочих способов) исполнителем задач.
Webpack Dev Server
Webpack Dev Server предоставляет решение, аналогичное Browsersync - серверу разработки, на котором вы можете быстро развернуть свое приложение во время работы над ним и немедленно проверить прогресс в разработке, так как сервер dev автоматически обновляет браузер при изменении кода или даже при распространении измененного кода. в браузер без перезагрузки с так называемой горячей заменой модуля.
Исполнители задач против сценариев NPM
Я использовал Gulp для его краткости и простоты написания задач, но позже обнаружил, что мне не нужны ни Gulp, ни Grunt вообще. Все, что мне когда-либо требовалось, могло быть сделано с использованием сценариев NPM для запуска сторонних инструментов через их API. Выбор между сценариями Gulp, Grunt или NPM зависит от вкуса и опыта вашей команды.
Хотя задачи в Gulp или Grunt легко читать даже людям, не знакомым с JS, это еще один инструмент, требующий и изучающий, и я лично предпочитаю сузить свои зависимости и упростить вещи. С другой стороны, замена этих задач комбинацией сценариев NPM и (вероятно, JS) сценариев, которые запускают эти сторонние инструменты (например, настройка сценария Node и запуск rimraf для очистки), может быть более сложной. Но в большинстве случаев эти три равны по своим результатам.
Примеры
Что касается примеров, я предлагаю вам взглянуть на этот стартовый проект React , который показывает вам хорошее сочетание сценариев NPM и JS, охватывающих весь процесс сборки и развертывания. Вы можете найти эти сценарии NPM в
package.json
корневой папке, в свойстве с именемscripts
. Там вы в основном встретите такие команды, какbabel-node tools/run start
. Babel-node - это инструмент CLI (не предназначенный для производственного использования), который сначала компилирует файлtools/run
ES6 (файл run.js, расположенный в инструментах ) - в основном утилиту бегуна. Этот бегун берет функцию в качестве аргумента и выполняет ее, что в данном случаеstart
- другая утилита (start.js
) отвечает за связывание исходных файлов (как клиентских, так и серверных) и запуск приложения и сервера разработки (сервер разработки, вероятно, будет либо Webpack Dev Server, либо Browsersync).Говоря более точно,
start.js
создает как клиентские, так и серверные пакеты, запускает экспресс-сервер и после успешного запуска инициализирует синхронизацию браузера, которая на момент написания выглядела так (см. Новейший код для реакции на стартовый проект ).Важной частью является то
proxy.target
, где они устанавливают адрес сервера, который они хотят прокси, который может быть http: // localhost: 3000 , и Browsersync запускает сервер, прослушивающий http: // localhost: 3001 , где сгенерированные ресурсы обслуживаются с автоматическим изменением обнаружение и замена горячего модуля. Как вы можете видеть, есть еще одно свойство конфигурацииfiles
с отдельными файлами или шаблонами. Browser-sync отслеживает изменения и перезагружает браузер, если таковые происходят, но, как говорится в комментарии, Webpack сам наблюдает за просмотром js-источников с HMR, поэтому они взаимодействуют там.Теперь у меня нет аналогичного примера такой конфигурации Grunt или Gulp, но с Gulp (и несколько похожим образом с Grunt) вы бы писали отдельные задачи в gulpfile.js, например
где вы будете делать в основном те же самые вещи, что и в стартовом наборе, на этот раз с бегунком задач, который решает некоторые проблемы для вас, но представляет свои собственные проблемы и некоторые трудности во время изучения использования, и, как я говорю, Чем больше у вас зависимостей, тем больше может пойти не так. И именно поэтому я люблю избавляться от таких инструментов.
источник
Обновление октябрь 2018
Если вы все еще не уверены в Front-end dev, можете взглянуть на отличный ресурс здесь.
https://github.com/kamranahmedse/developer-roadmap
Обновление июнь 2018
Изучать современный JavaScript сложно, если вы не были там с самого начала. Если вы новичок, не забудьте проверить это превосходно написано, чтобы иметь лучший обзор.
https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70
Обновление июль 2017
Недавно я нашел действительно исчерпывающее руководство от команды Grab о том, как подойти к разработке front-end в 2017 году. Вы можете проверить это, как показано ниже.
https://github.com/grab/front-end-guide
Я также искал это довольно давно, так как есть много инструментов, и каждый из них приносит нам пользу в своем аспекте. Сообщество делится на такие инструменты, как
Browserify, Webpack, jspm, Grunt and Gulp
. Вы также можете услышать оYeoman or Slush
. Это на самом деле не проблема, это просто сбивает с толку всех, кто пытается понять четкий путь вперед.Во всяком случае, я хотел бы внести свой вклад.
1. Диспетчер пакетов
Менеджеры пакетов упрощают установку и обновление зависимостей проекта, таких как библиотеки и
jQuery, Bootstrap
т. Д. - все, что используется на вашем сайте и не написано вами.Просматривая все сайты библиотеки, скачивая и распаковывая архивы, копируя файлы в проекты - все это заменяется несколькими командами в терминале.
NPM
расшифровывается как:Node JS package manager
помогает вам управлять всеми библиотеками, на которые опирается ваше программное обеспечение. Вы определяете свои потребности в файле, который вызываетсяpackage.json
и запускаетсяnpm install
в командной строке ... затем BANG, ваши пакеты загружены и готовы к использованию. Может быть использован как дляfront-end and back-end
библиотек.Bower
: для управления пакетами front-end концепция такая же, как и у NPM. Все ваши библиотеки хранятся в файле с именемbower.json
и затем запускаютсяbower install
в командной строке.NPM
Беседка
Yarn
: Новый менеджер пакетов дляJavaScript
опубликованного наFacebook
недавно еще с некоторыми преимуществами по сравнению сNPM
. А с помощью Yarn вы все равно можете использоватьNPM
иBower
реестр, и получить пакет. Если вы установили пакет ранее,yarn
создайте кэшированную копию, что облегчаетoffline package installs
.jspm
: менеджер пакетов дляSystemJS
универсального загрузчика модулей, построенный поверх динамическогоES6
загрузчика модулей. Это не совсем новый менеджер пакетов с собственным набором правил, скорее он работает поверх существующих источников пакетов. Из коробки работает сGitHub
иnpm
. Поскольку большинствоBower
пакетов основаны на нихGitHub
, мы можем установить и эти пакетыjspm
. Он имеет реестр, в котором перечислены большинство часто используемых интерфейсных пакетов для упрощения установки.2. Модуль Загрузчик / Комплектация
У большинства проектов любого масштаба код будет разбит на несколько файлов. Однако вы можете просто включить каждый файл с отдельным
<script>
тегом, чтобы<script>
установить новое http-соединение, а для небольших файлов - что является целью модульности - время на установку соединения может занять значительно больше времени, чем передача данных. Пока загружаются скрипты, содержимое на странице изменить нельзя.Например
Например
Компьютеры могут делать это лучше, чем вы, и поэтому вам следует использовать инструмент для автоматического объединения всего в один файл.
Потом мы услышали о
RequireJS
,Browserify
,Webpack
иSystemJS
RequireJS
:JavaScript
загрузчик файлов и модулей. Он оптимизирован для использования в браузере, но может использоваться в других средах JavaScript, напримерNode
.Например: myModule.js
В
main.js
, мы можем импортироватьmyModule.js
как зависимость и использовать его.И тогда в нашем
HTML
, мы можем сослаться на использование сRequireJS
.Browserify
: разрешить использованиеCommonJS
отформатированных модулей в браузере. Следовательно,Browserify
не столько загрузчик модулей, сколькоBrowserify
пакет модулей: это полностью инструмент времени сборки, создающий пакет кода, который затем может быть загружен на стороне клиента.Начните с машины сборки, на которой установлен узел & npm, и получите пакет:
Напишите ваши модули в
CommonJS
форматеИ когда все в порядке, введите команду bundle:
Browserify рекурсивно находит все зависимости точки входа и собирает их в один файл:
Webpack
: Он объединяет все ваши статические ресурсы, включаяJavaScript
изображения, CSS и многое другое, в один файл. Это также позволяет обрабатывать файлы с помощью различных типов загрузчиков. Вы можете написать свойJavaScript
сCommonJS
илиAMD
синтаксис модулей. Он решает проблему сборки более интегрированным и самоуверенным образом. ВBrowserify
вашемGulp/Grunt
распоряжении и длинный список трансформаций и плагинов для выполнения работы.Webpack
предлагает достаточно энергии из коробки, которая вам обычно не нужнаGrunt
или вообще не нужнаGulp
.Основное использование выходит за рамки простого. Установите Webpack как Browserify:
И передайте команде точку входа и выходной файл:
SystemJS
: это загрузчик модулей, который может импортировать модули во время выполнения в любом из популярных форматов, используемых сегодня (CommonJS, UMD, AMD, ES6
). Он построен поверхES6
polyfill загрузчика модулей и достаточно умен, чтобы определять используемый формат и обрабатывать его соответствующим образом.SystemJS
также может переносить код ES6 (с помощьюBabel
илиTraceur
) или другие языки, такие какTypeScript
иCoffeeScript
с помощью плагинов.3. Задача бегуна
Бегущие по задачам и инструменты сборки - это, прежде всего, инструменты командной строки. Почему мы должны их использовать: одним словом: автоматизация . Меньше работы, которую вы должны выполнять при выполнении повторяющихся задач, таких как минификация, компиляция, модульное тестирование, линтинг, которые раньше обходились нам много раз в командной строке или даже вручную.
Grunt
Вы можете автоматизировать среду разработки для предварительной обработки кодов или создания сценариев сборки с помощью файла конфигурации, и кажется, что выполнить сложную задачу очень сложно. Популярный в последние несколько лет.Каждая задача
Grunt
представляет собой массив различных конфигураций плагинов, которые просто выполняются одна за другой строго независимым и последовательным образом.Gulp
: Автоматизация, как и,Grunt
но вместо конфигурации, вы можете писатьJavaScript
с потоками, как это приложение узла. Предпочитаю эти дни.Это
Gulp
образец объявления задачи.4. Строительные леса
Slush and Yeoman
: Вы можете создавать стартовые проекты с ними. Например, вы планируете создать прототип с использованием HTML и SCSS, а не вручную создавать какую-либо папку, такую как scss, css, img, шрифты. Вы можете просто установитьyeoman
и запустить простой скрипт. Тогда все здесь для вас.Узнайте больше здесь .
Мой ответ не совсем соответствует содержанию вопроса, но когда я ищу эти знания в Google, я всегда вижу вопрос сверху, поэтому я решил ответить на него вкратце. Надеюсь, вы, ребята, нашли это полезным.
источник
Хорошо, у них всех есть некоторые сходства, они делают одно и то же для вас по-разному и похожим образом, я делю их на 3 основные группы, как показано ниже:
1) Модуль комплектации
webpack и browserify как популярные, работают как исполнители задач, но с большей гибкостью, так что он будет объединять все вместе как ваши настройки, так что вы можете указать на результат как bundle.js, например, в одном файле, включая CSS и Javascript, для подробнее о каждом, посмотрите на детали ниже:
WebPack
больше здесь
browserify
больше здесь
2) Задачи бегунов
gulp и grunt являются исполнителями задач, в основном то, что они делают, создают задачи и запускают их в любое время, например, вы устанавливаете плагин для минимизации вашего CSS, а затем запускаете его каждый раз для минимизации, подробнее о каждом:
глоток
больше здесь
хрюкать
больше здесь
3) Менеджеры пакетов
Менеджеры пакетов, что они делают, это управляют плагинами, которые вам нужны в вашем приложении, и устанавливают их для вас через github и т. д. с помощью package.json, который очень удобен для обновления ваших модулей, их установки и совместного использования вашего приложения, более подробная информация о каждом:
НПМ
больше здесь
беседка
больше здесь
и самый последний менеджер пакетов, который нельзя пропустить, он молодой и быстрый в реальной рабочей среде, по сравнению с npm, который я чаще всего использовал ранее, для переустановки модулей он дважды проверяет папку node_modules, чтобы проверить наличие модуля, Также кажется, что установка модулей занимает меньше времени:
пряжа
больше здесь
источник
Вы можете найти некоторые технические сравнения на npmcompare
Сравнение browserify против grunt против gulp против webpack
Как вы можете видеть, веб-пакет очень хорошо поддерживается, новая версия выходит в среднем каждые 4 дня. Но у Gulp, похоже, самое большое сообщество из них (более 20 тысяч звезд на Github), Grunt, похоже, немного пренебрегают (по сравнению с другими)
Так что, если нужно выбрать одно из другого, я бы пошел с Gulp
источник
Небольшое примечание о npm: npm3 пытается установить зависимости простым способом
https://docs.npmjs.com/how-npm-works/npm3#npm-v3-dependency-resolution
источник
dedupe
сделать то же самоеwebpack-dev-server - это живой перезагружаемый веб-сервер, который Webpack разработчики используют для немедленной обратной связи о том, что они делают. Это следует использовать только во время разработки.
Этот проект в значительной степени вдохновлен инструментом модульного тестирования nof5 .
Webpack , как следует из названия создаст ОДНОГО пакета возраст для сети . Пакет будет свернут и объединен в один файл (мы все еще живем в HTTP 1.1 age). Webpack использует магию объединения ресурсов (JavaScript, CSS, изображений) и внедрения их следующим образом:
<script src="assets/bundle.js"></script>
.Его также можно назвать модульным компоновщиком, поскольку он должен понимать зависимости модулей, а также то, как получить зависимости и связать их вместе.
Вы можете использовать Browserify для тех же задач, что и Webpack . - Webpack Хотя более компактен.
Обратите внимание, что функции загрузчика модулей ES6 в Webpack2 используют System.import , который изначально не поддерживается ни одним браузером.
Вы можете забыть Gulp, Grunt, Brokoli, Brunch и Bower . Вместо этого напрямую используйте сценарии командной строки npm, и вы можете исключить такие дополнительные пакеты для Gulp :
Вероятно, вы можете использовать генераторы конфигурационных файлов Gulp и Grunt при создании конфигурационных файлов для вашего проекта. Таким образом, вам не нужно устанавливать Yeoman или аналогичные инструменты.
источник
Yarn - недавний менеджер пакетов, который, вероятно, заслуживает упоминания.
Итак, вот оно: https://yarnpkg.com/
Насколько я знаю, он может извлекать зависимости как от npm, так и от bower, и имеет другие полезные функции.
источник
Webpack
это бандлер КакBrowserfy
это выглядит в базе кода для запросов модуля (require
илиimport
) и рекурсивно разрешает их. Более того, вы можете настроитьWebpack
разрешение не только JavaScript-подобных модулей, но и CSS, изображений, HTML, буквально всего. Что меня особенно радуетWebpack
, вы можете комбинировать как скомпилированные, так и динамически загружаемые модули в одном приложении. Таким образом, можно получить реальное повышение производительности, особенно по HTTP / 1.x. Как именно вы это делаете, я описал с примерами здесь http://dsheiko.com/weblog/state-of-javascript-modules-2017/ В качестве альтернативы для упаковщика можно подуматьRollup.js
( https://rollupjs.org/ ) , который оптимизирует код во время компиляции, но удаляет все найденные неиспользуемые фрагменты.Ведь
AMD
вместоRequireJS
одного можно пойти с нативнымES2016 module system
, но загруженным сSystem.js
( https://github.com/systemjs/systemjs )Кроме того, я хотел бы отметить, что
npm
часто используется как инструмент автоматизации, какgrunt
илиgulp
. Проверьте https://docs.npmjs.com/misc/scripts . Лично я сейчас работаю со сценариями npm, избегая только других инструментов автоматизации, хотя в прошлом я очень увлекалсяgrunt
. С другими инструментами вы должны полагаться на бесчисленные плагины для пакетов, которые часто плохо написаны и не поддерживаются.npm
знает свои пакеты, поэтому вы вызываете любой из локально установленных пакетов по имени, например:На самом деле вам, как правило, не нужен плагин, если пакет поддерживает CLI.
источник