Менеджер пакетов узлов (NPM) объясняется режиссерством фильма

1656532222 menedzher paketov uzlov npm obyasnyaetsya rezhisserstvom filma

Кевин Кононенко

Если вы понимаете общий способ создания голливудских фильмов, вы можете понять Node Package Manager (NPM).

Знаете ли вы, что первоначальную версию Node.js написал только один программист, Райан Дал, в 2009 году?

Сегодня, в 2018 году, миллионы разработчиков использовали Node.js для создания серверной части для своих веб-приложений. Но Node полагался на активное сообщество с открытым кодом, чтобы создать много специализированных пакетов в диспетчере пакетов Node или NPM.

Есть две причины, почему Райан Даль не разработал все эти специализированные функции самостоятельно:

  1. Разработчики не хотели использовать массивную, неуклюжую структуру, которая была написана для сотен случаев использования.
  2. Самому создавать все специализированные пакеты потребовалось бы слишком много времени.

Райан знал, что если Node станет популярнее, разработчики готовы внести свой вклад. Поэтому он запустил NPM в 2010 году, чтобы организовать все эти пакеты, созданные сообществом.

Однако начинающему веб-разработчику может быть сложно понять всю эту экосистему и как получить к ней доступ на локальном компьютере.

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

0_h-Af2amJ-W_85YYY

Итак, вот полное руководство по NPM. Чтобы понять этот учебник вам просто нужно знать разницу между front-end и backend.

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

Конечно, здесь возникает вопрос: каких актеров/актрис вы наймете? Как вы убедитесь, что все они могут работать вместе? Как вы устроите его в рамках бюджета?

Или вы пойдете в совершенно ином направлении и попытаетесь создать идеальную команду с нуля с относительно неизвестными актерами?

Если вы хотите нанять команду, вам нужно будет просмотреть какой-нибудь каталог, чтобы найти нужных людей. Я не знаю, есть ли в Голливуде какой-нибудь внутренний каталог, но на ум приходит IMDB. Или в те дни в Интернет, вероятно, был даже физический каталог.

0_OfNzoFOA9Scop-hQ

Так же, как IMDB содержит информацию о тысячах актеров, которые вы можете использовать для принятия решения о найме, NPM имеет сотни тысяч «пакетов», предлагающих специализированные функции. Все они написаны на JavaScript, поэтому ТЕХНИЧЕСКИ вы можете их переписать… но суть не в этом. Они призваны облегчить вашу жизнь, мгновенно делая доступными новые функции.

Это все равно что нанять известного актера/актриса — этот человек является специалистом в определенных типах ролей из-за прошлого опыта.

0_gYvhN0Ws1rlLL6uo

Мы все знаем специальность Лиама Нисона…

Итак, как разработчик, вы получаете доступ к реестру NPM, чтобы добавлять определенные пакеты в ваше веб-приложение, что должно облегчить вам жизнь. Так же, как все актеры/актрисы построили свою карьеру, все пакеты NPM были созданы отдельными разработчиками или командами и внесены в реестр.

В коде все эти пакеты отслеживаются в файле package.json. Итак, этот файл похож на список людей, участвующих в фильме. Вот пример этого списка:

0_94FQCRZXv3NGz2W8

Мы рассмотрим версии позже в этом учебнике.

Представим, что в вашем фильме есть 100 ролей, которые необходимо исполнить. Будь у вас неограниченный бюджет, хотели бы вы исполнять все эти роли известными актерами/актерами, которые играли подобные роли в прошлом?

Вероятно, нет.

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

Наконец, чтобы стать великим актером, нужны годы опыта.

Так же, когда вы создаете веб-приложение, вы постоянно сталкиваетесь с выбором — могу ли я создать эту функциональность самостоятельно, или мне следует использовать пакет для выполнения задания?

Вы знаете фильм «Супердесантники»? Это классическая комедия, а бюджет составил всего 3 миллиона долларов. Однако самые красивые фильмы стоят 10-100 миллионов долларов. Вы можете создать невероятную программу с нуля, но, вероятно, захотите использовать пакеты.

0_H1HOGMdz6Swfae3H

Скажем, вы наняли Марка Уолберга, известного американского актера, для своего фильма. Когда Марк присоединяется к вашему фильму, это не только он. У него есть команда людей, которые поддерживают его и делают его успешным. Шеф-повар, тренер, агент.

0_si4-ybeeHo_o6Sx1

Так же каждый отдельный пакет не работает самостоятельно. Авторы пакета также использовали другие пакеты NPM, чтобы облегчить жизнь. На самом деле их пакет будет делиться некоторыми зависимостями с другими пакетами, так же, как Марк Волберг может делиться частным шеф-поваром с другими актерами и актрисами.

Вот список зависимостей для запроса, популярный пакет:

0_aX2XcgXqhvH898m5

Итак, вернемся к нашему примеру package.json сверху:

0_yzyTg-PLBa-Dyxsa

Когда вы добавляетеaxios” к вашему приложению, вы не просто добавляете файл axios. Вы также добавляете любые зависимости, которые axios файл пригодится, если вы ранее не добавляли их с другим пакетом. Они не указаны прямо, но вы всегда можете найти их внутри узлы_модули папку.

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

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

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

Думайте об этом как об актерах/актерах на разных этапах их карьеры. Некоторые могут играть подобные роли в течение своей карьеры, другие могут кардинально измениться.

0_JZullYOFh6dTh7hd

Молодой против старого Клинта Иствуда

При загрузке Node и NPM на локальную машину можно мгновенно использовать различные команды для работы с каталогом NPM. Одним из распространенных является:

npm установить

Если вы хотите установить экспресс пакет, вы должны ввести в командной строке:

npm install Express

Затем NPM загрузит экспресс-код и его зависимость на ваш локальный компьютер. Это сродни найму нового актера. Или —

npm uninstall express

Это как «запуск» экспресс-пакета из вашего приложения.

Вы можете добавлять новые команды в раздел «Скрипты» файла package.json. Одним из распространенных является «start», что означает «начать запуск сервера узла». Это выглядит так:

0_Z9ZoMm3vSFGk-Грязь

Как режиссер, который кричит «Действуй!»

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

Если вам нужна информация о различиях между localhost и production, просмотрите данное руководство.

Подумайте о всём времени и энергии, которые тратятся на создание фильма. Лишь небольшая часть этого происходит на официальной съемочной площадке при работе камер. За кулисами – часы работы над запоминанием реплик, поднятием тяжестей в спортзале и изучением новых акцентов. Чтобы сделать команду более эффективной, директор может нанять специализированных тренеров для каждой из этих функций.

Итак, когда мы посмотрим на все пакеты, используемые программой Node, мы можем разделить их на две категории:

  1. Пакеты, используемые как в производстве, так и локально
  2. Пакеты, используемые только локально
0__kdSnu3_r0xpRRtu

Grunt – это программа для выполнения задач, автоматизирующая повторяющиеся команды в командной строке. Nodemon автоматически перезапускает сервер после любых изменений в коде сервера.

В файле package.json они разделены на два раздела: зависимости и devDependencies. Вот как это выглядит:

0_tu-qbY_hG7z-qKzl
0_z4Y9LhCYX96HPGYL

Добавить комментарий

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