Недавно, начав изучать React, я увидела, что многие люди (включая меня) путались, видя npx вместо привычного npm.


Некоторые из нас считали это странным, но не вдавались в детали. Что хуже, другие думали, что это опечатка, и даже пытались «исправить» её, запустив npm вместо npx.


Когда я вижу что-то странное более одного раза, я считаю, что аномалию стоит изучить углублённо. Я сделала это и решила поделиться своими наблюдениями в этой статье:


Это не опечатка, это npx, НЕ npm!




NPM


Как мы уже знаем, npm — менеджер пакетов для Node.js, задачей которого является автоматическое разрешение зависимостей и управление пакетами.


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


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


NPX


С другой стороны, npx является инструментом для выполнения пакетов Node и поставляется в комплекте с npm, начиная с версии 5.2.


Npx делает следующее:


1. Проверяет, существует ли в нашем проекте пакет, который должен быть выполнен; 

2. Существует — выполняем его;

3. Не существует — npx устанавливает последнюю версию пакета и лишь затем выполняет;

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


Например, выполнение npx some-package --no-install говорит npx лишь попытаться выполнить some-package, если последний уже установлен. В противном случае вы получите ошибку.


Больше про флаги npx можно почитать здесь.


Пример


Допустим, существует пакет my-package, и мы хотим его выполнить.


Без npx придётся запускать его по локальному пути, например, так:


./node_modules/bin/my-package

или же определять его как отдельный скрипт в разделе scripts в файле package.json:


{
  "name": "something",
  "version": "1.0.0",
  "scripts": {
    "my-package": "./node_modules/bin/my-package"
  }
}

чтобы можно было выполнять npm run my-package.


Но с npx мы можем писать npx my-package сразу.


Заключение


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


Спасибо, что дочитали. Хорошего кодинга!

Комментарии (0)