Диспетчер пакетов Node (NPM), объясняемый режиссурой фильма
Если вы понимаете общий способ создания голливудских фильмов, то вы можете понять Node Package Manager (NPM).
Знаете ли вы, что первоначальная версия Node.js была написана всего одним программистом, Райаном Далем, в 2009 году?
Сегодня, в 2018 году, миллионы разработчиков использовали Node.js для создания серверной части своих веб-приложений. Но Node полагался на активное сообщество разработчиков открытого исходного кода для создания множества специализированных пакетов в диспетчере пакетов Node или NPM.
Есть две веские причины, по которым Райан Даль сам не разработал все эти специализированные функции:
- Разработчики не захотят использовать громоздкий, неуклюжий фреймворк, написанный для сотен вариантов использования.
- Создание всех специализированных пакетов самостоятельно заняло бы чертовски много времени!
Вместо этого Райан знал, что, если популярность Node вырастет, разработчики захотят внести свой вклад. Итак, он запустил NPM в 2010 году, чтобы организовать все эти пакеты, созданные сообществом.
Однако начинающему веб-разработчику может быть сложно понять всю эту экосистему и как получить к ней доступ на локальном компьютере.
Поразмыслив над этим некоторое время, я понял, что использовать NPM — это все равно, что быть режиссером голливудского фильма. Ваша задача — манипулировать кучей людей (или пакетов) специализированными функциями, не сводя всех с ума (или делая невозможным создание вашего приложения).
Итак, вот полное руководство по NPM. Чтобы понять этот урок, вам просто нужно знать разница между интерфейсом и бэкэндом.
Что такое НПМ?
Представьте, что вы режиссер нового голливудского фильма. Приняв роль, вам сразу же нужно начать нанимать актеров и других исполнителей для создания фильма вместе с вами.
Конечно, сразу возникает вопрос: каких актеров/актрис вы наймете? Как вы убедитесь, что все они могут работать вместе? Как вы уложитесь в бюджет?
Или вы пойдете в совершенно другом направлении и попытаетесь создать идеальную команду с нуля с относительно неизвестными актерами?
Если вы хотите нанять команду, вам нужно просмотреть какой-то каталог, чтобы найти нужных людей. Я не знаю, есть ли в Голливуде какой-то внутренний каталог, но ИМДБ это то, что приходит на ум. Или, во времена, когда еще не было Интернета, возможно, существовал даже физический каталог.
Точно так же, как в IMDB есть информация о тысячах актеров, которую вы можете использовать для принятия решения о найме, в NPM есть сотни тысяч «пакетов», предлагающих специализированные функции. Все они написаны на JavaScript, поэтому ТЕХНИЧЕСКИ вы можете их переписать… но суть не в этом. Они призваны облегчить вашу жизнь, делая новые функции доступными мгновенно.
Это похоже на найм известного актера/актрисы — этот человек является специалистом по определенным типам ролей благодаря прошлому опыту.
Мы все знаем специальность Лиама Нисона.
Итак, как разработчик, вы получаете доступ к реестру NPM, чтобы добавлять определенные пакеты в свое веб-приложение, что должно облегчить вашу жизнь. И точно так же, как все актеры/актрисы построили свою карьеру, все пакеты NPM были созданы отдельными разработчиками или командами и внесены в реестр.
В вашем коде все эти пакеты отслеживаются в файле package.json. Итак, этот файл похож на список людей, которые задействованы в фильме. Вот пример такого списка:
Мы рассмотрим версии позже в этом руководстве.
Описание пакетов
Давайте представим, что в вашем фильме есть 100 ролей, которые нужно заполнить. Если бы у вас был неограниченный бюджет, вы бы хотели заполнить все эти роли известными актерами/актрисами, которые играли подобные роли в прошлом?
Возможно нет. Каждый хотел бы стать звездой шоу и изменить правила, чтобы соответствовать своему характеру. Это был бы кошмар. Но если вы наймете только неизвестных актеров… сделать отличный фильм будет довольно сложно! В конце концов, чтобы стать великим актером, нужны годы опыта.
Точно так же, когда вы создаете веб-приложение, вы постоянно сталкиваетесь с выбором: могу ли я создать эту функциональность самостоятельно или мне следует использовать пакет для выполнения задачи?
Вы знаете фильм «Супер Солдаты«? Это классическая комедия, а бюджет составил всего 3 миллиона долларов. Однако самые лучшие фильмы стоят от 10 до 100 миллионов долларов. Вы можете создать невероятное веб-приложение с нуля… но вы, вероятно, захотите использовать пакеты.
Допустим, вы нанимаете для своего фильма Марка Уолберга, известного американского актера. Когда Марк присоединяется к вашему фильму, присоединяется не только он! У него есть команда людей, которые поддерживают его и делают его успешным. Шеф-повар… тренер… агент…
Точно так же каждый отдельный пакет не работает независимо. Авторы пакетов также использовали другие пакеты NPM, чтобы облегчить себе жизнь. Фактически, их пакет будет иметь некоторые общие зависимости с другими пакетами, точно так же, как Марк Уолберг мог бы разделить личного повара с другими актерами и актрисами.
Вот список зависимостей для запроспопулярный пакет:
Итак, вернемся к нашему exale package.json сверху:
Когда вы добавляете «аксиомы” в свое приложение, вы не просто добавляете файл axios. Вы также добавляете любые зависимости, которые аксиомы файл понадобится, если вы ранее не добавили их другим пакетом. Они не указаны явно, но вы всегда можете найти их в node_modules папка.
Это одно из преимуществ npm. Когда вы добавляете новый пакет, вам даже не нужно проверять, используете ли вы уже все необходимые пакеты, которые поддерживают используемый вами пакет. npm автоматически добавит файлы enw в ваш каталог.
Объяснение версий
Вы видите три набора цифр рядом с каждым пакетом выше? Это номер версии. Поскольку разработчики постоянно обновляют свои пакеты, вы можете использовать конкретную версию пакета или автоматически использовать последнюю версию.
Итак, когда вы используете в своем проекте 40 различных пакетов, и все они постоянно меняются… вы можете обнаружить, что возникают проблемы с совместимостью. Например, когда React выпустит свою новейшую версию, ваше приложение может перестать работать так, как вы ожидаете. Вот где в игру вступает тестирование, но это тема другого урока.
Думайте об этом как об актерах/актрисах на разных этапах их карьеры. Некоторые могут играть одинаковые роли на протяжении всей своей карьеры, в то время как другие могут кардинально измениться.
Молодой против старого Клинта Иствуда
Использование командной строки
Когда вы загружаете Node и NPM на свой локальный компьютер, вы можете мгновенно использовать различные команды для работы с каталогом NPM. Один общий:
установка нпм
Если вы хотите установить выражать package, вы должны ввести в командной строке:
экспресс-установка npm
Затем NPM загрузит экспресс-код и его зависимости на ваш локальный компьютер. Это похоже на найм нового актера. Или:
npm удалить экспресс
Это похоже на «выстрел» экспресс-пакета из вашего приложения.
Вы можете добавить новые команды в раздел «скрипты» вашего файла package.json. Одним из распространенных является «запуск», что означает «запустить сервер узла». Это выглядит так:
Вроде как режиссер кричит «Действуй!».
Объяснение зависимостей
До сих пор мы лишь вкратце коснулись концепции зависимостей. В вашем приложении, скорее всего, будет пара пакетов, которые работают только в локальной версии, например инструменты тестирования и транспиляции. Другими словами, у вас должна быть пара инструментов, которые вы используете только в своей локальной среде, а не в рабочей версии.
Если вам нужно освежить в памяти разницу между локальным хостом и производством, проверить это руководствое.
Подумайте обо всем, сколько времени и энергии уходит на создание фильма. Лишь небольшая часть этого происходит на официальной съемочной площадке с работающими камерами. За кулисами проходят часы работы по запоминанию строк, поднятию тяжестей в тренажерном зале и изучению новых акцентов. Чтобы сделать команду более эффективной, директор может нанять специализированных коучей для каждой из этих функций.
Итак, когда мы смотрим на все пакеты, используемые приложением Node, мы можем разделить их на две категории:
- Пакеты, используемые как в производственной, так и в локальной
- Пакеты, которые только что использовались локально
ворчание это средство запуска задач, которое автоматизирует повторяющиеся команды в командной строке. Нодемон автоматически перезагружает ваш сервер при любых изменениях в коде вашего сервера.
В вашем файле package.json они разделены на два раздела: зависимости и devDependencies. Вот как это выглядит:
Получить последние учебные пособия
Вам понравилось это руководство? Проверьте Блог о кодовых аналогах чтобы получить последние объяснения концепций HTML, CSS и JavaScript.