В данном посте я хочу вам представить очень мощную утилиту, которая доступна в npm начиная с версии 5.2 (выпущена в июле 2017) — npx.
Если вы не используете npm в качестве пакетного менеджера, вы можете установить
npx
как отдельный пакет
npx
позволяет нам запускать код, написанный с использованием Node.js, и/или опубликованный в качестве пакета в npm registry.
Простой запуск локальных команд

cowsay
в качестве локальной devDependency
и его запуск с помощью $ npx cowsay
Раньше Node.js разработчики распространяли большинство утилит для командной строки в качестве глобальных пакетов, чтобы те в свою очередь после установки были доступны в $PATH
для выполнения.
Это было болью, потому что в таком случае вы не можете установить разные версии одного пакета. Поэтому обычно используют другой подход. Для каждого проекта устанавливают пакеты нужных версий в devDependencies
, а их запуск прописывают как отдельные команды npm run-script
.
Теперь нам больше не надо прописывать алиасы для вызова данных команд! Выполнение npx commandname
автоматически найдет корректный путь, относящийся к данной команде, внутри директории node_modules
текущего проекта. npx
не принуждает нас указывать точный путь до скрипта или устанавливать пакет глобально в область видимости пользовательского $PATH
.
Выполнение команды без установки

$ npx create-react-app my-cool-new-app
временно устанавливает create-react-app
и вызывает его, без замусоривания глобально установленных пакетов и делает это за один шаг!Еще одной отличной фишкой npx
является возможность выполнять команды без предварительной их установки.
Это очень удобно, потому что:
- Нам не надо ничего устанавливать
- Мы можем запускать различные версии одно команды используя синтаксис
@version
Типичная демонстрация использования npx
— запуск команды cowsay
. Она выводит корову, которая говорит переданное ей сообщение. Например:
cowsay "Hello"
выведет в консоль:
_______ < Hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Но это произойдет в том случает, если вы до этого установили пакет cowsay
глобально, иначе вы получите ошибку.
npx
позволяет вам запустить данную команду npm без локальной установки:
npx cowsay "Hello"
Эта команда отработает как надо.
Ну это была довольно бесполезная команда. Вот некоторые сценарии, где npx сослужит нам добрую службу:
- Запуск cli-инструмента
vue
для создания новых приложений и их запуска:npx vue create my-vue-app
- Создание новых React приложений используя
create-react-app
:npx create-react-app my-react-app
- и много других примеров
В данном случае использования npx
для запуска команд без установки код будет сначала загружен, а после выполнения удален. Данный кейс отлично подходит, если вы хотите просто попробовать какой-то инструмент, не раздувая node_modules
, или когда вам изредка нужно вызывать какую-то команду.
Вот некоторые интересные пакеты, которые вы можете попробовать использовать с npx: happy-birthday, benny-hill, workin-hard, cowsay, yo, create-react-app, npm-check.
Запуск команды без установки для проекта
Мы можем взять два первых примера использования npx
и совместить их. Этот вариант отлично подходит для случая, когда нам необходимо вызывать некоторые команды в процессе разработки, при этом нам не понадобится устанавливать лишние npm пакеты.
Например, при разработке веб-сервера на Node.js часто требуется перезапускать процесс при изменении кода. Для этого можно использовать команду из пакета supervisor
. Мы можем указать ее использование через npx
в директиве scripts
внутри package.json
нашего проекта:
{ "scripts": { "dev": "npx supervisor index.js", "start": "node index.js" } }
Теперь при запуске npm run dev
будет запускаться npx supervisor
, что позволяет использовать команду без установки пакета.
Выполнение кода с использованием другой версии Node.js
Вы можете использовать особый npm-пакет node
вместе с синтаксисом @
, чтобы выполнить код в другой версии Node.js:
npx [email protected] -v #v6.14.3 npx [email protected] -v #v8.11.3

npx -p [email protected]<version> node -v
может использоваться для однократного запуска различных версий nodeДанный кейс позволяет отказаться от nvm или других инструментов управления версий Node.js
Выполнять произвольные снипеты кода по URL
npx не ограничивает вас в использовании только пакетами, опубликованными в npm registry. Вы также можете выполнять код из GitHub gist просто передав в npx ссылку на него, например:
npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32
Разумеется, вы должны быть осторожны запуская код, который не контролируется вами. С великой силой приходит великая ответственность.
Автофоллбек для командной строки
Node.js со своей широкой экосистемой прочно обосновался в современном рабочем процессе веб-разработчика. Даже если вы большую часть времени пишите на другом языке, думаю в вашем рабочем окружении есть Node.js. Без него сейчас никуда. Только в этой посте вы видели несколько полезных инструментов.
Что если вы хотите еще плотнее интегрировать инструменты из NPM в свой рабочий процесс? А что если я вам скажу, что npx
позволяет вам это сделать!
Как уже было отмечено во втором примере, при запуске консольной команды, которой нет в нашем окружении $PATH
, мы получаем ошибку. Но консоль также нам предоставляет обработчик данной ошибки и npx
может внедрить в него.
Данная функция поддерживается для командных строк bash, zsh и fish. Все что вам нужно, так это добавить в конфиг вашей командной строки вызов генерации обработчика ошибки от npx
(раздел в документации):
source <(npx --shell-auto-fallback bash) # для bash source <(npx --shell-auto-fallback zsh) # для zsh source (npx --shell-auto-fallback fish | psub) # для fish
После перезапуска консоли вы можете выполнять команды npm без необходимости обращаться напрямую к npx
!

npx
в .zshrc
означает, что вы можете вызывать [email protected]
без прямого вызова npx
вообще!Источник: Flavio Copes