npm vs npx

Работая с JavaScript или Node.js, вы, скорее всего, сталкивались с npm, менеджером пакетов Node. Это универсальный инструмент для управления пакетами, установки зависимостей и обеспечения того, чтобы ваш проект постоянно обновлялся с помощью необходимых библиотек. Но есть npx, еще один инструмент, поставляемый в комплекте с npm, который часто вызывает вопрос: в чем разница между ними?

На первый взгляд кажется, что и npm, и npx помогают вам взаимодействовать с пакетами Node.js, но они служат разным целям. В этой статье мы рассмотрим ключевые различия между npm и npx, покажем вам, как они работают, и рассмотрим, когда следует использовать каждый из них.

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

Что такое npm?

НПМ расшифровывается как пакетный менеджер, и it’s в точности то, что звучит как — инструмент управления Node.js пакеты. Каждый раз, когда вам понадобится новый пакет для вашего проекта, вы будете обращаться к npm за помощью в его установке. Эти пакеты могут варьироваться от небольших служебных функций до полноценных фреймворков и библиотек.

Но npm предназначен не только для установки библиотек. Он также отлично подходит для управления зависимостями проектов и сценариями. Если вам нужно заблокировать определенные версии библиотеки, чтобы предотвратить внесение критических изменений, npm поможет вам. Это также позволяет вам определять сценарии в вашем файле package.json для автоматизации таких распространенных задач, как тестирование или создание вашего проекта.

Как работает npm

Думайте о npm как о цифровом хранилище программных компонентов. Когда вы начинаете новую Node.js проект, для его создания вам понадобятся различные инструменты и библиотеки. Вместо того чтобы изобретать велосипед заново, вы можете использовать npm для извлечения и установки этих готовых пакетов. Он работает за счет ведения обширного онлайн-реестра пакетов, каждый из которых имеет свое уникальное название и версию.

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

npm install <package-name>

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

npm install cowsay

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

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

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

{
  "scripts": {
    "start": "node index.js",
    "test": "jest"
  }
}

Используя эти функции, npm помогает оптимизировать рабочие процессы, делая управление зависимостями и автоматизацию задач более простыми и организованными для разработчиков JavaScript.

Что такое npx?

npx был представлен с npm версии 5.2.0. В то время как npm - это установка пакетов и управление ими, npx - это их запуск.

Думайте о npx как о быстром выполнении команд, которое позволяет вам выполнять Node.js пакеты без их установки. npx особенно полезен, когда вы хотите использовать пакет только один раз или протестировать его, не добавляя постоянно в свою систему.

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

Как работает npx

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

Допустим, вы хотите использовать create-react-app для запуска нового проекта React. Обычно сначала вам нужно установить его глобально:

npm install -g create-react-app

А потом ты бы побежал:

create-react-app my-app

Но с помощью npx вы можете пропустить глобальную установку и запустить ее напрямую:

npx create-react-app my-app

Эта команда загружает create-react-app, запускает его и удаляет, когда вы закончите. Это быстро и удобно, а также избавляет вашу систему от перегруженности глобальными пакетами, которые вы могли бы использовать только один раз.

Если вы уже установили пакет локально в свой проект, npx может помочь вам запустить его без необходимости указывать полный путь к node_modules. Например, если вы установили JEST локально для тестирования, вы можете запустить его с помощью npx следующим образом:

npx jest

npx автоматически находит пакет в вашей локальной папке node_modules и запускает его, экономя ваше время и нервы.

Я думаю, что самой крутой особенностью NPX является его способность определять, какой пакет или команду вы пытаетесь запустить. Решение о том, как выполнить любую команду, состоит из трех этапов:

  • Проверьте локально: сначала npx проверяет, установлен ли пакет локально в папке node_modules вашего проекта. Если он находит пакет, он запускает его оттуда Проверьте глобально: если пакет не найден локально, npx проверяет, установлен ли он глобально в вашей системе. Если он находит пакет глобально, он запускает его Извлечение из реестра npm: Наконец, если npx не находит пакет ни локально, ни глобально, он извлекает пакет из реестра npm, запускает его, а затем удаляет после выполнения

Примечание: по умолчанию npx запускает последнюю версию пакета, но если вам нужна конкретная версия, вы также можете указать, какую версию запускать.

Ключевые различия между npm и npx

npm и npx являются важнейшими инструментами в экосистеме Node.js, но на разных уровнях они играют разную роль:

Вывод: Когда вам следует использовать npm по сравнению с npx?

Решение о том, когда использовать npm или npx, зависит от задачи и потребностей вашего проекта.

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

С другой стороны, npx лучше всего подходит для быстрых одноразовых команд или инструментов тестирования без необходимости глобальной установки. Если вы хотите использовать инструмент только один раз - например, create-react-app для начальной загрузки проекта React - npx позволяет запускать его напрямую, не загромождая вашу систему. Это также удобно для запуска локально установленных пакетов без ввода полного пути к ним, что упрощает рабочий процесс. Короче говоря, используйте npm для долгосрочного управления зависимостями и npx для временных задач или запуска пакетов на лету.