Для чего нужны npm, bower, gulp, Yeoman и grunt?

Я бэкэнд-разработчик, и меня немного смущают npm, bower, gulp, grunt и Yeoman. Всякий раз, когда я спрашиваю кого-то, какова его цель, ответ имеет тенденцию сводиться к менеджеру по зависимости - для всех них. Конечно, нам не нужны четыре разных инструмента, которые все делают одинаково?

Может ли кто-нибудь объяснить, для чего каждое из них хорошо, в как можно меньшем количестве предложений - если возможно, по одному на инструмент, используя язык, который может понять пятилетний ребенок (с навыками разработки)?

Например:

  • SVN хранит, управляет и отслеживает изменения в нашем исходном коде

Я использовал Maven, Jenkins, Nexus и Ant в прошлом; может быть, вы могли бы сравнить инструменты выше с этим?

Также не стесняйтесь добавлять другие внешние инструменты в список.

Вот что я узнал до сих пор - хотя я не уверен, что это правильно:

  • менеджер зависимостей bower для интерфейсной разработки /JS-библиотек, использует плоский список зависимостей
  • Менеджер зависимостей npm для сервера node.js, может разрешать транзитивные зависимости / деревья зависимостей
  • grunt запускает задачи, очень похожие на Jenkins, но локальность в командной строке
  • Yeoman предоставил строительные леса, то есть каркасные проекты
  • глоток такой же, как хрюканье, но написано только в js
  • сервер node.js для js-приложений?
  • git децентрализованный SCM/VCS, аналог svn/cvs

Я рядом?:)

4 ответа

Решение

Вы близки! Добро пожаловать в JavaScript:)

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

bower Ориентирован на пакеты, которые используются в браузере. каждый bower install <packagename> указывает только на один файл, который будет включен (больше может быть загружено). Благодаря успеху webpack, browserify и babel он в основном устарел как менеджер зависимостей первого класса.

Обновление 2018 года: беседка в основном устарела в пользу НПМ

npm Historical сосредотачивается на коде NodeJS, но имеет низвергнутую бауру для модулей браузера. Не позволяйте никому обмануть вас: NPM огромен. NPM также загружает МНОГО файлов в ваш проект, и новая установка npm всегда является хорошей причиной для приготовления новой чашки кофе. NPM прост в использовании, но он может сломать ваше приложение при изменении среды из-за слабого способа ссылаться на версии и произвола публикации модулей. Исследование термоусадочной пленки и npm install --save-exact

Обновление 2018 года: NPM вырос! Много улучшений, касающихся безопасности и воспроизводимости были реализованы.

grunt Облегчает автоматизацию задач. Глотает старший и несколько более вялый брат. Сообщество JavaScript часто встречалось с ним в 2014 году. В некоторых местах Grunt уже считается наследием, но есть еще много действительно мощных средств автоматизации. Конфигурация может быть кошмаром для больших вариантов использования. Хотя для этого есть модуль ворчания.

Обновление 2018 года: хрюканье в основном устарело. Простые в написании конфигурации веб-пакетов убили его.

Делает то же самое, что и хрюканье, но быстрее.

npm run-script Вам, возможно, не понадобятся исполнители задач вообще. Скрипты NodeJS действительно просты в написании, поэтому большинство сценариев позволяют настраивать рабочий процесс автоматизации задач. Запустите сценарии из контекста вашего файла package.json, используя npm run-script

Веб-пакет Не пропустите веб-пакет. Особенно, если вы чувствуете себя потерянным из-за множества способов написания JavaScript в последовательный модульный код. Webpack упаковывает файлы.js в модули и делает это великолепно. Webpack обладает широкими возможностями расширения и предлагает хорошую среду разработки: webpack-dev-server Используйте вместе с babel для наилучшего возможного использования JavaScript на сегодняшний день.

Йоменские леса. Чрезвычайно полезен для команд с разным опытом, поскольку он обеспечивает контролируемую общую основу для архитектуры ваших проектов. Там даже есть леса для строительных лесов.

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

  1. Я использую Йомана, чтобы построить базовый скелет.
  2. Я использую узел в качестве среды выполнения для моего приложения. то есть. бежать node appname
  3. Я использую npm для установки модулей узла, чтобы помочь мне написать приложение в узле
  4. Мне может понадобиться какой-то компонент из bower, такой как интерфейсные библиотеки, поэтому используйте bower для их получения.
  5. Теперь, чтобы выполнить несколько повторяющихся задач, я буду использовать grunt или gulp для написания некоторых задач. Поэтому каждый раз, когда я хочу повторить это, скажем, сверните мои js-файлы, которые я называю grunt / gulp, и заставьте их делать это. Разница, которую вы спрашиваете, Gulp основан на потоке, а grunt основан на задачах.
  6. Я делаю контроль версий, используя git, чтобы отслеживать изменения
  1. Gulp vs Grunt: Gulp обеспечивает большую гибкость благодаря автоматизации задач, Grunt поставляется со множеством функций в соответствии с общими практиками разработки. Есть два основных различия между Grunt и Gulp:

    • Grunt сосредотачивается на конфигурации, в то время как Gulp сосредотачивается на коде
    • Grunt был построен на основе набора встроенных и часто используемых задач, в то время как Gulp пришел с идеей ничего не навязывать, а то, как разработанные сообществом микро-задачи должны соединяться друг с другом. Читать здесь

  1. NodeJS: это неблокирующий серверный язык сценариев. Это означает, что операции не будут блокировать дальнейшее выполнение до завершения текущей операции.

  1. Git: Как вы упомянули, это инструмент SCM, широко используемый. Согласно документации GitHub, она отличается от других инструментов SCM, поскольку данные никогда не удаляются.

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

    Когда вы выполняете действия в Git, почти все они только добавляют данные в базу данных Git. Очень трудно заставить систему сделать что-либо, что не может быть отменено, или заставить ее каким-либо образом стереть данные. Как и в любой VCS, вы можете потерять или испортить изменения, которые вы еще не сделали; но после того, как вы сделаете снимок в Git, его очень трудно потерять, особенно если вы регулярно отправляете свою базу данных в другое хранилище.

    Прочитайте больше


  1. Bower против NPM: Bower и NPM являются менеджерами зависимостей, но модули Bower предназначены для фронт-энда. NPM - это огромная коллекция модулей, которые будут использоваться с бэкэндом NodeJS. Этот так ответ охватывает это лучше

Я добавил некоторые детали:

npm - менеджер пакетов для javascript, npm - экосистема пакетов nodejs, но его можно использовать только для внешних проектов.

grunt & gulp полезны для разделения и автоматизации таких задач, как минификация, компиляция, модульное тестирование в командной строке, это более легкое решение, чем (например) Visual Studio, поскольку этот процесс представляет собой только отдельную (и обычно легковесную) командную строку / процесс.

Относительно различий между gulp, grunt и bower уже есть билет: каковы различия между Grunt, Gulp.js и Bower? Почему и когда их использовать?

Nodejs - это скорее среда исполнения javascript. Node.js позволяет создавать веб-серверы и сетевые инструменты с использованием js и набора "модулей", которые обрабатывают различные основные функции и другие основные функции. Источник

Этот билет возобновляет различия между Git и Subversion: почему Git лучше, чем Subversion?

Другие вопросы по тегам