Или: Что '$npx create-react-app <my-react-app>' does

Предпосылки

  • Знайте, что такое пакеты Node и почему вы хотите их использовать и выполнять.
  • Понимание глобальной и локальной области действия в контексте выполнения файлов в вашей ОС.

tl;dr

NPM – это менеджер пакетов, который позволяет вам управлять пакетами Node, но не выполнять их.
NPX – это инструмент для выполнения пакетов Node, поставляемый с NPM версии 5.2+.

Объяснение

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

  1. локально через папку ./npm_modules в вашем проекте или
  2. глобально, например, через /usr/local/bin.

Если вы устанавливаете пакет Node локально внутри проекта,

$ cd my-project
$ npm install my-package

введите его имя и нажмите клавишу ввода,

$ my-package

ваш терминал выдаст ошибку, потому что при этом проверяется только системная глобальная переменная $PATH для определения местоположения пакета (т.е. вышеупомянутого /usr/local/bin) и поскольку пакет был установлен локально в вашей папке ./node_modules, которая, скорее всего, не связана в $PATH (это не будет, если вы не поместите его туда намеренно) его нельзя найти.
Чтобы исправить это, вам нужно будет включить локальный путь к пакету в свою команду.

$ ./node_modules/.bin/my-package

Есть способы обойти это, если вы используете файл package.json и npm run-script, но я не буду вдаваться в подробности.

Это приводит нас к тому, почему и как работает NPX — средство запуска пакетов Node.

$ npx my-package

(обратите внимание на 'x' в npx вместо 'm'), выполняемый локально в папке вашего проекта, будет безукоризненно запускать пакет, поскольку он ищет его не только в путях упоминается в упомянутой выше глобальной переменной $PATH, а также в папке ./node_modules локального проекта.

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

$ npx create-react-app my-react-app

загружает новейшую версию пакета Node create-react-app, создает шаблон реакции для нового приложения реакции с именем my-react-app в папке, в которой вы сейчас находитесь, и впоследствии удаляет загруженный пакет. Таким образом, вам не нужно беспокоиться об обновлении пакета create-react-app каждый раз, когда вы создаете новое приложение для реагирования.

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