Или: Что '$npx create-react-app <my-react-app>' does
Предпосылки
- Знайте, что такое пакеты Node и почему вы хотите их использовать и выполнять.
- Понимание глобальной и локальной области действия в контексте выполнения файлов в вашей ОС.
tl;dr
NPM – это менеджер пакетов, который позволяет вам управлять пакетами Node, но не выполнять их.
NPX – это инструмент для выполнения пакетов Node, поставляемый с NPM версии 5.2+.
Объяснение
Во-первых, пакеты Node могут быть установлены локально в папке вашего проекта или глобально в вашей операционной системе, и в этом случае они доступны в каждом проекте.
Вы управляете (устанавливаете, обновляете, удаляете…) указанными пакетами с помощью NPM — Node Диспетчер пакетов, но вы не можете использовать его для их выполнения/запуска.
Когда исполняемые файлы устанавливаются через пакет Node, NPM связывается с ними, как описано выше, либо
- локально через папку
./npm_modules
в вашем проекте или - глобально, например, через
/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 каждый раз, когда вы создаете новое приложение для реагирования.
Я не являюсь носителем языка, но я всегда стараюсь улучшить себя и свое письмо. Поэтому, если вы обнаружите какую-либо ошибку в одной из моих статей, сообщите мне об этом.