Что такое npx и npm
Если вы когда-либо использовали Node.js, то вы наверняка использовали npm.
В этой статье мы рассмотрим различия между npm и npx и узнаем, как получить лучшее из обоих.
Во-первых, давайте разберемся, что же такое npm и что мы можем с ним сделать.
npm менеджер пакетов
Во-вторых, это инструмент CLI, который помогает вам устанавливать эти пакеты и управлять их версиями и зависимостями. На npm есть сотни тысяч библиотек и приложений Node.js, и каждый день добавляются и другие.
Когда исполняемые файлы устанавливаются через npm, он создает ссылки на них:
Чтобы выполнить пакет с помощью npm, вы должны либо ввести локальный путь, например:
или вы можете запустить локально установленный пакет, добавив его в свой файл package.json в разделе скриптов, например:
Затем вы можете запустить скрипт, используя npm run :
Вы можете видеть, что запуск пакета с простым npm требует некоторой церемонии.
К счастью, здесь пригодится npx.
Запуск пакетов с npx
Начиная с версии 5.2.0 npm, npx предварительно связан с npm. Так что это в значительной степени стандарт в наши дни.
Теперь очень легко запустить любой исполняемый файл Node.js, который вы обычно устанавливаете через npm.
Вы можете запустить следующую команду, чтобы увидеть, установлена ли она уже для вашей текущей версии npm:
Если это не так, вы можете установить его так:
Как только вы убедитесь, что он установлен, давайте рассмотрим несколько вариантов использования, которые делают npx чрезвычайно полезным.
Запустить локально установленный пакет легко
Если вы хотите выполнить локально установленный пакет, все, что вам нужно сделать, это набрать:
Выполнить пакеты, которые ранее не были установлены
Еще одним важным преимуществом является возможность выполнения пакета, который ранее не был установлен.
Иногда вы просто хотите использовать некоторые инструменты CLI, но не хотите устанавливать их глобально, просто чтобы протестировать их. Это означает, что вы можете сэкономить место на диске и просто запускать их только тогда, когда они вам нужны. Это также означает, что ваши глобальные переменные будут менее загрязнены.
Запустите код прямо из GitHub
Это довольно хорошо.
Вы можете использовать npx для запуска любых GitHub списков и репозиториев. Давайте сосредоточимся на выполнении GitHub Gist, потому что его легче создать.
Здесь вы можете найти код, который я использовал для этого примера.
Обязательно внимательно прочитайте любой скрипт перед его выполнением, чтобы избежать серьезных проблем, которые могут возникнуть из-за вредоносного кода.
Протестируйте разные версии пакета
С помощью npx чрезвычайно легко тестировать разные версии пакета или модуля Node.js. Чтобы протестировать эту замечательную функцию, мы собираемся локально установить пакет create-react-app и протестировать следующую версию.
Это перечислит некоторые теги dist ближе к концу вывода. Теги Dist предоставляют псевдонимы для номеров версий, что значительно упрощает ввод.
После установки мы можем перейти к приложению следующим образом:
и затем запустите его с помощью этой команды:
Вывод
npx помогает нам избежать версий, проблем с зависимостями и установки ненужных пакетов, которые мы просто хотим попробовать.
Он также предоставляет простой и понятный способ выполнения пакетов, команд, модулей и даже списков и репозиториев GitHub.
Если вы раньше не использовали npx, сейчас самое время начать!
Руководство по Node.js, часть 5: npm и npx
Сегодня, в пятой части перевода руководства по Node.js, мы завершим разбор возможностей npm, в частности, коснёмся таких вопросов, как выяснение установленных версий npm-пакетов, установка старых версий пакетов, обновление зависимостей, локальная и глобальная деинсталляция пакетов. Здесь же мы поговорим и об npx.
Выяснение версий установленных npm-пакетов
Для того чтобы узнать версии всех установленных в папке проекта npm-пакетов, включая их зависимости, выполните следующую команду:
В результате, например, может получиться следующее:
То же самое можно узнать и просмотрев файл package-lock.json проекта, но древовидную структуру, которую выводит вышеописанная команда, удобнее просматривать.
Для того чтобы получить подобный список пакетов, установленных глобально, можно воспользоваться следующей командой:
Вывести только сведения о локальных пакетах верхнего уровня (то есть, тех, которые вы устанавливали самостоятельно и которые перечислены в package.json ) можно так:
В результате, если, например, устанавливали вы только пакет cowsay, выведено будет следующее:
Для того чтобы узнать версию конкретного пакета, воспользуйтесь следующей командой:
В результате её выполнения получится примерно следующее:
Эта команда подходит и для выяснения версий зависимостей установленных вами пакетов. При этом в качестве имени пакета, передаваемого ей, выступает имя пакета-зависимости, а вывод команды будет выглядеть следующим образом:
Запись о пакете-зависимости в этой структуре будет выделена.
Если вы хотите узнать о том, каков номер самой свежей версии некоего пакета, доступного в npm-репозитории, вам понадобится команда следующего вида:
В ответ она выдаёт номер версии пакета:
Установка старых версий npm-пакетов
Установка старой версии npm-пакета может понадобиться для решения проблем совместимости. Установить нужную версию пакета из npm можно, воспользовавшись следующей конструкцией:
В случае с используемым нами в качестве примера пакетом cowsay, команда npm install cowsay установит его самую свежую версию (1.3.1 на момент написания этого материала). Если же надо установить его версию 1.2.0, воспользуемся такой командой:
Указывать версии можно и устанавливая глобальные пакеты:
Если вам понадобится узнать о том, какие версии некоего пакета имеются в npm, сделать это можно с помощью такой конструкции:
Вот пример результата её работы:
Обновление зависимостей проекта до их самых свежих версий
Кроме того, устанавливая некий пакет, npm находит и устанавливает его зависимости.
В package-lock.json так же будут внесены сведения об этом пакете. Вот его фрагмент:
Для того чтобы узнать, вышли ли новые версии используемых в проекте пакетов, можно воспользоваться следующей командой:
Вот результаты выполнения этой команды для проекта, зависимости которого давно не обновлялись:
Анализ устаревших зависимостей проекта
Для того чтобы обновиться до новых мажорных версий всех используемых пакетов, глобально установите пакет npm-check-updates :
Затем запустите утилиту, предоставляемую им:
Локальная или глобальная деинсталляция пакетов
), выполните команду следующего вида:
При выполнении подобной команды текущая папка значения не имеет.
О выборе между глобальной и локальной установкой пакетов
Когда и почему пакеты лучше всего устанавливать глобально? Для того чтобы ответить на этот вопрос, вспомним о том, чем различаются локальная и глобальная установка пакетов:
.
Подключение локальных и глобальных пакетов в коде осуществляется одинаково:
Итак, какой же способ установки пакетов лучше всего использовать?
В общем случае, все пакеты следует устанавливать локально. Благодаря этому, даже если у вас имеются десятки Node.js-проектов, можно обеспечить, при необходимости, использование ими различных версий одних и тех же пакетов.
Обновление глобального пакета приводит к тому, что все проекты, в которых он применяется, будут использовать его новый релиз. Несложно понять, что это, в плане поддержки проектов, может привести к настоящему кошмару, так как новые релизы некоторых пакетов могут оказаться несовместимыми с их старыми версиями.
Если у каждого проекта имеется собственная локальная версия некоего пакета, даже при том, что подобное может показаться пустой тратой ресурсов, это — очень небольшая плата за возможность избежать негативных последствий, которые могут быть вызваны несовместимостью новых версий пакетов, обновляемых централизованно, с кодом проектов.
Пакеты следует устанавливать глобально в том случае, когда они представляют собой некие утилиты, вызываемые из командной строки, которые используются во множестве проектов.
Подобные пакеты можно устанавливать и локально, запуская предоставляемые ими утилиты командной строки с использованием npx, но некоторые пакеты, всё же, лучше устанавливать глобально. К таким пакетам, которые вам, вполне возможно, знакомы, можно отнести, например, следующие:
О зависимостях проектов
Когда пакет следует рассматривать как обычную зависимость проекта, необходимую для обеспечения его функционирования, а когда — как зависимость разработки?
При установке пакета с помощью команды вида npm install
Зависимости разработки — это пакеты, которые нужны в процессе разработки проекта, в ходе его обычного функционирования они не требуются. К таким пакетам относятся, например инструменты тестирования, Webpack, Babel.
Утилита npx
Сейчас мы поговорим об одной весьма мощной команде, npx, которая появилась в npm 5.2. Одной из её возможностей является запуск исполняемых файлов, входящих в состав npm-пакетов. Мы уже рассматривали использование npx для запуска подобного файла из пакета cowsay. Теперь поговорим об этом подробнее.
▍Использование npx для упрощения запуска локальных команд
Node.js-разработчики опубликовали множество исполняемых файлов (утилит) в виде пакетов, которые предполагалось устанавливать глобально, что обеспечивало удобный доступ к их возможностям, так как запускать их из командной строки можно было, просто введя имя соответствующей команды. Однако работать в такой среде было весьма некомфортно в том случае, если требовалось устанавливать разные версии одних и тех же пакетов.
▍Выполнение утилит без необходимости их установки
В npx имеется ещё одна интереснейшая возможность, благодаря которой утилиты можно запускать без их предварительной установки. Полезно это, в основном, по следующим причинам:
Если же пакет cowsay не будет установлен глобально, подобная команда выдаст ошибку.
Утилита npx позволяет выполнять подобные команды без их установки. Выглядит это, в рамках нашего примера, так:
Такая команда сработает, но, хотя «говорящая» корова, по большому счёту, особой пользы не приносит, тот же самый подход можно использовать и для выполнения куда более полезных команд. Вот несколько примеров:
▍Запуск JavaScript-кода с использованием различных версий Node.js
Это позволяет отказаться от использования инструментов наподобие nvm или других менеджеров версий Node.js.
▍Запуск произвольных фрагментов кода, доступных по некоему адресу
Npx позволяет запускать не только код, опубликованный в npm. В частности, если у вас есть ссылка на некий фрагмент кода (скажем, опубликованного на GitHub gist), запустить его можно так:
Конечно, при выполнении подобного кода нельзя забывать о безопасности. Npx даёт в руки разработчика большие возможности, но они означают и большую ответственность.
▍Итоги
Сегодня мы поговорили о некоторых полезных механизмах npm и об использовании npx. На данном этапе у вас должно сложиться базовое понимание устройства npm и методов работы с этим пакетным менеджером. Если вы хотите более глубоко изучить npm — обратитесь к странице документации проекта и побольше экспериментируйте.
В следующий раз мы обсудим некоторые базовые механизмы Node.js, понимание которых необходимо для успешной разработки приложений для этой платформы.
Уважаемые читатели! Пользуетесь ли вы npx?
Разница между npx и npm?
ОТВЕТЫ
Ответ 1
Представляем npx: бегун пакета npm
NPX поставляется в комплекте с NPM версии 5.2+
Когда исполняемые файлы устанавливаются через пакеты NPM, NPM связывается с ними:
Можно установить пакет локально на определенный проект:
Теперь допустим, что вы хотите, чтобы NodeJS выполнил этот пакет из командной строки:
Выше потерпит неудачу. Только глобально установленные пакеты могут быть выполнены путем ввода только их имени.
Чтобы это исправить и запустить, вы должны ввести локальный путь:
Технически вы можете запустить локально установленный пакет, отредактировав файл packages.json и добавив этот пакет в раздел scripts :
Затем запустите скрипт, используя npm run-script (или npm run ):
Еще одним важным преимуществом npx является возможность выполнять пакет, который ранее не был установлен:
Приведенный выше пример будет генерировать шаблон приложения react по пути, по которому была запущена команда, и гарантирует, что вы всегда будете использовать последнюю версию генератора или инструмента сборки без необходимости обновлять каждый раз, когда вы собираетесь его использовать.
Смежные вопросы:
Ответ 2
Как упомянуто на странице руководства https://www.npmjs.com/package/npx, npx может запускать команды в PATH или из node_modules/.bin по умолчанию.
Примечание. С некоторыми копаниями мы можем обнаружить, что create-реакции-приложение указывает на файл Javascript (возможно, на /usr/lib/node_modules/create-react-app/index.js в системах Linux), который выполняется в среде узла, Это просто глобальный инструмент, который делает некоторые проверки. Фактическая настройка выполняется по реагирующим скриптам, последняя версия которых установлена в проекте. Обратитесь к https://github.com/facebook/create-react-app для получения дополнительной информации.
Ответ 3
Веб-разработчики могут иметь десятки проектов на своих машинах для разработки, и каждый проект имеет свой собственный набор установленных npm-зависимостей. Несколько лет назад обычный совет для работы с приложениями CLI, такими как Grunt или Gulp, заключался в том, чтобы устанавливать их локально в каждом проекте, а также глобально, чтобы их можно было легко запустить из командной строки.
Но глобальная установка вызвала столько проблем, сколько она решила. Проекты могут зависеть от разных версий инструментов командной строки, и загрязнение операционной системы большим количеством специфических для разработки инструментов CLI также невелико. Сегодня большинство разработчиков предпочитают устанавливать инструменты локально и оставить все как есть.
Локальные версии инструментов позволяют разработчикам извлекать проекты из GitHub, не беспокоясь о несовместимости с глобально установленными версиями инструментов. NPM может просто установить локальные версии, и все готово. Но установки, специфичные для проекта, не обходятся без проблем: как запустить правильную версию инструмента без указания его точного местоположения в проекте или использования псевдонимов?
Например, если вы хотите запустить локальную для проекта версию mocha, вы можете запустить npx mocha внутри проекта, и она будет делать то, что вы ожидаете.
Полезным побочным преимуществом npx является то, что он автоматически устанавливает пакеты npm, которые еще не установлены. Итак, как отмечает создатель инструментов Кэт Марчан, вы можете запустить npx benny-hill, не сталкиваясь с тем, что Benny Hill загрязняет окружающую среду.
Если вы хотите взять npx за спин, обновитесь до последней версии npm.
Ответ 4
Неважно, установили ли вы этот пакет глобально или локально. NPX временно установит его и запустит. NPM также может запускать пакеты, если вы настроите файл package.json и включите его в раздел сценариев.
Запомните это, если вы хотите быстро проверить/запустить пакет узла без локальной или глобальной установки, используйте NPX.
Ответ 5
npx запускает команду пакета без явной его установки.
Пакет не является обязательным:
Подробнее о command :
Ответ 6
Ответ 7
Вот пример NPX в действии: npx cowsay hello
Если вы введете это в свой терминал bash, вы увидите результат. Преимущество этого заключается в том, что npx временно установил cowsay. Там нет загрязнения пакета, так как коровье не установлено постоянно. Это отлично подходит для одноразовых упаковок, где вы хотите избежать загрязнения упаковки.
Как упоминалось в других ответах, npx также очень полезен в тех случаях, когда (с npm) необходимо установить пакет и настроить его перед запуском. Например, вместо использования npm для установки и настройки файла json.package, а затем для вызова настроенной команды запуска просто используйте вместо него npx. Реальный пример: npx create-Reaction-app my-app
Ответ 8
Извините, я не мог полностью уточнить.
Ответ 9
NPX служит различным целям, но я в основном использую его, когда я не хочу устанавливать пакет глобально и когда я хочу протестировать только некоторые пакеты без явной установки их в проекте.
Вот пост, который я написал о NPX, который объясняет различные вещи, которые вы можете сделать с ним
Ответ 10
Если вы используете npm 5.1 или более раннюю версию, вы не можете использовать npx. Вместо этого, установите create-Reaction-app глобально:
Теперь вы можете запустить:
создать-реагировать-приложение мое-приложение
Node.js. Утилиты npm и npx
Утилита npm
Утилита npm — это менеджер пакетов, который входит в состав Node.js. Пакетом называется один или несколько js-файлов, представляющих собой какую-то библиотеку или инструмент. Менеджер пакетов предназначен для скачивания пакетов из облачного сервера, либо для загрузки (публикации) пакетов на этот сервер.
1. Инициализация проекта
Для создания нового проекта нужно создать директорию проекта, перейти в нее и выполнить команду
2. Файл package-lock.json
3. Установленные пакеты
Получить список всех установленных в директории проекта npm-пакетов можно с помощью команды
Получить список всех установленных глобально npm-пакетов (см.ниже) можно с помощью команды
4. Подробная информация о пакете
Посмотреть подробную информацию о пакете, доступного через npm-репозиторий
Получить информацию из npm-репозитория о последней доступной версии пакета
5. Локальная установка пакетов
Установить все пакеты из секций dependencies и devDependencies файла package.json :
Установить все пакеты из секции dependencies файла package.json (для production сервера)
Установить пакет package-name и добавить в секцию devDependencies файла package.json :
Установить пакет package-name и добавить в секцию dependencies файла package.json :
6. Локальное удаление пакетов
Удалить пакет package-name и удалить его из секции devDependencies файла package.json :
Удалить пакет package-name и удалить его из секции dependencies файла package.json :
7. Глобальная установка пакета
По умолчанию npm будет устанавливать все пакеты в локальной директории, в которым мы сейчас работаем (директория проекта). Если нужно, чтобы пакет был доступен всем приложениям, его нужно установить глобально. Но это не лучшее решение — разные проекты могут требовать разные версии одного пакета. Глобально установленный пакет будет нормально работать в одном проекте и вызывать ошибку в другом.
8. Глобальное удаление пакета
Так что если из-за глобально установки пакета возникли трудности — можно удалить его с помощью команды
9. Локальное обновление пакетов
Обновить один пакет или все пакеты проекта (нужно выполнять из директории проекта):
Чтобы узнать, вышли ли новые версии используемых в проекте пакетов
10. Как безопасно обновляться
Для того, чтобы обновиться до новых мажорных версий всех используемых пакетов, нужно глобально установить пакет
Теперь можно посмотреть, какие пакеты можно обновить (без внесения каких-либо изменений):
Убедившись, что обновление достаточно безопасно, можно выполнять следующую команду:
11. Глобальное обновление пакетов
Обновить один пакет или все пакеты, установленные глобально (можно выполнять из любого места):
12. Установка конкретной версии
Установка старой версии npm-пакета может понадобиться для решения проблем совместимости:
Узнать, какие версии некоего пакета имеются в npm-репозитории
13. Запуск скриптов
Запускать эти команды можно с помощью команды
14. Справка по менеджеру пакетов
У менеджера пакетов есть подробная справка по все командам
Для примера, посмотрим справку по команде install (в браузере)
Утилита npx
Существует множество утилит в виде пакетов (например, create-react-app ), которые изначально предполагалось устанавливать глобально. Запускать их из командной строки было очень просто — достаточно ввести имя утилиты в консоли. Однако мы уже знаем, что глобальная установка пакетов создает множество проблем.
Конечно, мы можем что-нибудь придумать, чтобы избежать проблем с глобальной установкой таких утилит. Например, установить пакет create-react-app глобально, запустить один раз из директории проекта, чтобы создать React-приложение — и сразу после этого удалить.
Если пакет cowsay не установлен глобально, подобная команда выдаст ошибку:
Утилита npx скачает пакет cowsay из npm-репозитория, установит во временную директорию и выполнит утилиту. Что важно — не загрязняя глобальное пространство. Так что при использовании npx необходимости в глобальной установке пакетов больше нет.
Руководство по Node.js, часть 5: npm и npx
Сегодня, в пятой части перевода руководства по Node.js, мы завершим разбор возможностей npm, в частности, коснёмся таких вопросов, как выяснение установленных версий npm-пакетов, установка старых версий пакетов, обновление зависимостей, локальная и глобальная деинсталляция пакетов. Здесь же мы поговорим и об npx.
Выяснение версий установленных npm-пакетов
Для того чтобы узнать версии всех установленных в папке проекта npm-пакетов, включая их зависимости, выполните следующую команду:
В результате, например, может получиться следующее:
То же самое можно узнать и просмотрев файл package-lock.json проекта, но древовидную структуру, которую выводит вышеописанная команда, удобнее просматривать.
Для того чтобы получить подобный список пакетов, установленных глобально, можно воспользоваться следующей командой:
Вывести только сведения о локальных пакетах верхнего уровня (то есть, тех, которые вы устанавливали самостоятельно и которые перечислены в package.json ) можно так:
В результате, если, например, устанавливали вы только пакет cowsay, выведено будет следующее:
Для того чтобы узнать версию конкретного пакета, воспользуйтесь следующей командой:
В результате её выполнения получится примерно следующее:
Эта команда подходит и для выяснения версий зависимостей установленных вами пакетов. При этом в качестве имени пакета, передаваемого ей, выступает имя пакета-зависимости, а вывод команды будет выглядеть следующим образом:
Запись о пакете-зависимости в этой структуре будет выделена.
Если вы хотите узнать о том, каков номер самой свежей версии некоего пакета, доступного в npm-репозитории, вам понадобится команда следующего вида:
В ответ она выдаёт номер версии пакета:
Установка старых версий npm-пакетов
Установка старой версии npm-пакета может понадобиться для решения проблем совместимости. Установить нужную версию пакета из npm можно, воспользовавшись следующей конструкцией:
В случае с используемым нами в качестве примера пакетом cowsay, команда npm install cowsay установит его самую свежую версию (1.3.1 на момент написания этого материала). Если же надо установить его версию 1.2.0, воспользуемся такой командой:
Указывать версии можно и устанавливая глобальные пакеты:
Если вам понадобится узнать о том, какие версии некоего пакета имеются в npm, сделать это можно с помощью такой конструкции:
Вот пример результата её работы:
Обновление зависимостей проекта до их самых свежих версий
Кроме того, устанавливая некий пакет, npm находит и устанавливает его зависимости.
В package-lock.json так же будут внесены сведения об этом пакете. Вот его фрагмент:
Для того чтобы узнать, вышли ли новые версии используемых в проекте пакетов, можно воспользоваться следующей командой:
Вот результаты выполнения этой команды для проекта, зависимости которого давно не обновлялись:
Анализ устаревших зависимостей проекта
Для того чтобы обновиться до новых мажорных версий всех используемых пакетов, глобально установите пакет npm-check-updates :
Затем запустите утилиту, предоставляемую им:
Локальная или глобальная деинсталляция пакетов
), выполните команду следующего вида:
При выполнении подобной команды текущая папка значения не имеет.
О выборе между глобальной и локальной установкой пакетов
Когда и почему пакеты лучше всего устанавливать глобально? Для того чтобы ответить на этот вопрос, вспомним о том, чем различаются локальная и глобальная установка пакетов:
.
Подключение локальных и глобальных пакетов в коде осуществляется одинаково:
Итак, какой же способ установки пакетов лучше всего использовать?
В общем случае, все пакеты следует устанавливать локально. Благодаря этому, даже если у вас имеются десятки Node.js-проектов, можно обеспечить, при необходимости, использование ими различных версий одних и тех же пакетов.
Обновление глобального пакета приводит к тому, что все проекты, в которых он применяется, будут использовать его новый релиз. Несложно понять, что это, в плане поддержки проектов, может привести к настоящему кошмару, так как новые релизы некоторых пакетов могут оказаться несовместимыми с их старыми версиями.
Если у каждого проекта имеется собственная локальная версия некоего пакета, даже при том, что подобное может показаться пустой тратой ресурсов, это — очень небольшая плата за возможность избежать негативных последствий, которые могут быть вызваны несовместимостью новых версий пакетов, обновляемых централизованно, с кодом проектов.
Пакеты следует устанавливать глобально в том случае, когда они представляют собой некие утилиты, вызываемые из командной строки, которые используются во множестве проектов.
Подобные пакеты можно устанавливать и локально, запуская предоставляемые ими утилиты командной строки с использованием npx, но некоторые пакеты, всё же, лучше устанавливать глобально. К таким пакетам, которые вам, вполне возможно, знакомы, можно отнести, например, следующие:
О зависимостях проектов
Когда пакет следует рассматривать как обычную зависимость проекта, необходимую для обеспечения его функционирования, а когда — как зависимость разработки?
При установке пакета с помощью команды вида npm install
Зависимости разработки — это пакеты, которые нужны в процессе разработки проекта, в ходе его обычного функционирования они не требуются. К таким пакетам относятся, например инструменты тестирования, Webpack, Babel.
Утилита npx
Сейчас мы поговорим об одной весьма мощной команде, npx, которая появилась в npm 5.2. Одной из её возможностей является запуск исполняемых файлов, входящих в состав npm-пакетов. Мы уже рассматривали использование npx для запуска подобного файла из пакета cowsay. Теперь поговорим об этом подробнее.
▍Использование npx для упрощения запуска локальных команд
Node.js-разработчики опубликовали множество исполняемых файлов (утилит) в виде пакетов, которые предполагалось устанавливать глобально, что обеспечивало удобный доступ к их возможностям, так как запускать их из командной строки можно было, просто введя имя соответствующей команды. Однако работать в такой среде было весьма некомфортно в том случае, если требовалось устанавливать разные версии одних и тех же пакетов.
▍Выполнение утилит без необходимости их установки
В npx имеется ещё одна интереснейшая возможность, благодаря которой утилиты можно запускать без их предварительной установки. Полезно это, в основном, по следующим причинам:
Если же пакет cowsay не будет установлен глобально, подобная команда выдаст ошибку.
Утилита npx позволяет выполнять подобные команды без их установки. Выглядит это, в рамках нашего примера, так:
Такая команда сработает, но, хотя «говорящая» корова, по большому счёту, особой пользы не приносит, тот же самый подход можно использовать и для выполнения куда более полезных команд. Вот несколько примеров:
▍Запуск JavaScript-кода с использованием различных версий Node.js
Это позволяет отказаться от использования инструментов наподобие nvm или других менеджеров версий Node.js.
▍Запуск произвольных фрагментов кода, доступных по некоему адресу
Npx позволяет запускать не только код, опубликованный в npm. В частности, если у вас есть ссылка на некий фрагмент кода (скажем, опубликованного на GitHub gist), запустить его можно так:
Конечно, при выполнении подобного кода нельзя забывать о безопасности. Npx даёт в руки разработчика большие возможности, но они означают и большую ответственность.
▍Итоги
Сегодня мы поговорили о некоторых полезных механизмах npm и об использовании npx. На данном этапе у вас должно сложиться базовое понимание устройства npm и методов работы с этим пакетным менеджером. Если вы хотите более глубоко изучить npm — обратитесь к странице документации проекта и побольше экспериментируйте.
В следующий раз мы обсудим некоторые базовые механизмы Node.js, понимание которых необходимо для успешной разработки приложений для этой платформы.
Уважаемые читатели! Пользуетесь ли вы npx?