Я только начал изучать React, и Facebook помогает упростить начальную настройку, предоставляя следующий готовый проект.
Если мне нужно установить скелетный проект, мне нужно ввести npx create-react-app my-app в командной строке.
Мне было интересно, почему у Facebook в Github есть npx create-react-app my-app, а не npm create-react-app my-app?
Связанный пост - Как использовать пакет, установленный локально в node_modules?
В этом посте объясняется, почему использовать npx на примере thecodeframework.com/…



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


npx - средство запуска пакетов npm (x, вероятно, означает eXecute). Типичное использование - загрузить и запустить пакет временно или для пробного использования.
создать-реагировать-приложение - это пакет npm, который, как ожидается, будет запущен только один раз в жизненном цикле проекта. Следовательно, предпочтительно использовать npx для его установки и запуска за один шаг.
Как упоминалось на главной странице https://www.npmjs.com/package/npx, npx может запускать команды в PATH или из node_modules / .bin по умолчанию.
Примечание: Покопавшись, мы можем обнаружить, что приложение create-response-app указывает на файл Javascript (возможно, на /usr/lib/node_modules/create-react-app/index.js в системах Linux), который выполняется в среде узла. Это просто глобальный инструмент, который выполняет некоторые проверки. Фактическая настройка выполняется сценариями реакции, последняя версия которых установлена в проекте. Обратитесь к https://github.com/facebook/create-react-app для получения дополнительной информации.
Типичное использование - запуск версии, уже установленной локально или глобально, так же часто, как и загрузка и запуск пакета.
NPX:
Web developers can have dozens of projects on their development machines, and each project has its own particular set of npm-installed dependencies. A few years back, the usual advice for dealing with CLI applications like Grunt or Gulp was to install them locally in each project and also globally so they could easily be run from the command line.
But installing globally caused as many problems as it solved. Projects may depend on different versions of command line tools, and polluting the operating system with lots of development-specific CLI tools isn’t great either. Today, most developers prefer to install tools locally and leave it at that.
Local versions of tools allow developers to pull projects from GitHub without worrying about incompatibilities with globally installed versions of tools. NPM can just install local versions and you’re good to go. But project specific installations aren’t without their problems: how do you run the right version of the tool without specifying its exact location in the project or playing around with aliases?
That’s the problem npx solves. A new tool included in NPM 5.2, npx is a small utility that’s smart enough to run the right application when it’s called from within a project.
If you wanted to run the project-local version of mocha, for example, you can run npx mocha inside the project and it will do what you expect.
A useful side benefit of npx is that it will automatically install npm packages that aren’t already installed. So, as the tool’s creator Kat Marchán points out, you can run npx benny-hill without having to deal with Benny Hill polluting the global environment.
If you want to take npx for a spin, update to the most recent version of npm.
Если вы используете nvm-windows, вы, скорее всего, не получите npx с npm, но вам нужно установить его вручную! npm i -g npx
NPM can just install local versions - не правильно. npm можно установить глобально, и это обычная практика.
Отличное введение в NPX можно найти здесь: medium.com/@maybekatz/…, Кэт Марчан.
@vsync Я считаю, что это следует интерпретировать как «NPM может просто устанавливать локальные версии, и все готово». вместо того, чтобы подразумевать ограничение.
NPM - пакеты Управляетно не облегчает жизнь выполнение any.NPX - инструмент для пакетов узлов выполнение.
NPXcomes bundled withNPMversion5.2+
NPM сам по себе не просто запускает какой-либо пакет. на самом деле он не запускает никаких пакетов. Если вы хотите запустить пакет с помощью NPM, вы должны указать этот пакет в вашем файле package.json.
Когда исполняемые файлы устанавливаются через пакеты NPM, NPM ссылается на них:
./node_modules/.bin/.bin/ (например, /usr/local/bin) в Linux или %AppData%/npm в Windows.Документация, которую следует прочитать
Можно установить пакет локально в определенный проект:
npm install some-package
Теперь предположим, что вы хотите, чтобы NodeJS выполнял этот пакет из командной строки:
$ some-package
Вышеупомянутое будет неудача. Только пакеты глобально установлен могут быть выполнены путем ввода их имени Только.
Чтобы исправить это и запустить его, вы должны ввести локальный путь:
$ ./node_modules/.bin/some-package
Технически вы можете запустить локально установленный пакет, отредактировав файл packages.json и добавив этот пакет в раздел scripts:
{
"name": "whatever",
"version": "1.0.0",
"scripts": {
"some-package": "some-package"
}
}
Затем запустите сценарий, используя npm run-script (или npm run):
npm run some-package
npx проверит, существует ли <command> в $PATH или в локальных двоичных файлах проекта, и выполнит его. Итак, для приведенного выше примера, если вы хотите запустить локально установленный пакет some-package, все, что вам нужно сделать, это ввести:
npx some-package
Еще одно преимущество главныйnpx - это возможность выполнить пакет, который ранее не был установлен:
$ npx create-react-app my-app
В приведенном выше примере будет сгенерирован шаблон приложения reactв - путь, по которому была запущена команда, и что вы всегда будете использовать последнюю версию генератора или инструмента сборки без необходимости обновления каждый раз, когда вы собираетесь его использовать.
Команда npx может быть полезна в разделе script файла package.json,
когда нежелательно определять зависимость, которая может не использоваться обычно, или по какой-либо другой причине:
"scripts": {
"start": "npx [email protected]",
"serve": "npx http-server"
}
Звоните с: npm run serve
Так что реагируйте, не используйте node.js, верно? Почему он доступен через npm (диспетчер пакетов узлов)?
Несколько лет назад был Беседка для управления пакетами внешнего интерфейса, но его использование резко упало в пользу npm. Среди некоторых причин вы можете просто использовать один диспетчер пакетов для всего, что связано с javascript, и вы также можете использовать общие разрешения js для разработки проектов внешнего интерфейса. Вы можете проверить этот ответ для получения дополнительной информации. Что касается реакции: нет, он не использует напрямую node, хотя вы также можете использовать его в node! (например, рендеринг на стороне сервера)
@RecuencoJones - Вы прокомментировали мой ответ вместо OP
Да, я забыл упомянуть @winklerrr, я обращался к его комментарию
Я думаю, что наиболее полезной функцией является установка пакета NPX, когда он еще не установлен. В противном случае добавьте ./node_modules/.bin в свой $ PATH, и NPX не понадобится.
Мне показалось, что первая ссылка от создателя npx была ужасной. Она хвастается тем, что npx заменяет существующие хаки npm, но не объясняет, что на самом деле делает npx при запуске. Если вы не знакомы со старыми хитростями npm, вы прочтете эту статью и потеряете интерес.
Если вы используете пакет npx-ing несколько раз, есть смысл установить его локально или глобально. Потому что каждый раз, когда вы выполняете пакет через npx, он запускается и удаляется. Комментарий владельца npx: github.com/zkat/npx/issues/113#issuecomment-329848019
Вот пример NPX в действии: npx cowsay hello
Если вы введете это в свой терминал bash, вы увидите результат. Преимущество этого заключается в том, что npx временно установил cowsay. Загрязнение упаковки отсутствует, поскольку cowsay не устанавливается постоянно. Это отлично подходит для одноразовых пакетов, когда вы хотите избежать загрязнения упаковки.
Как упоминалось в других ответах, npx также очень полезен в тех случаях, когда (с npm) пакет необходимо установить, а затем настроить перед запуском. Например. вместо использования npm для установки, а затем настройки файла json.package и последующего вызова настроенной команды запуска просто используйте вместо этого npx. Реальный пример: npx создать-реагировать-приложение мое приложение
Где он его устанавливает и удаляет ли он после завершения команды, или он кэширует его в течение некоторого времени, или всегда проверяет, что у вас самая последняя версия пакета?
@ redOctober13 есть некоторое кеширование, но npx также каждый раз запрашивает в реестре npm новейшую версию, поэтому кеширование не очень помогает с быстродействием. И он каждый раз расширяется, а затем очищает зависимости.
npx запускает команду пакета без его явной установки.
Сценарии использования:
package.json для выполнения чего-либо без установки этих пакетов в качестве зависимостей проекта.Синтаксис:
npx [options] [-p|--package <package>] <command> [command-arg]...
Пакет не является обязательным:
npx -p uglify-js uglifyjs --output app.min.js app.js common.js
+----------------+ +--------------------------------------------+
package (optional) command, followed by arguments
Например:
Start a HTTP Server : npx http-server
Lint code : npx eslint ./src
# Run uglifyjs command in the package uglify-js
Minify JS : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4
Подробнее о command:
NPM - это менеджер пакетов, вы можете устанавливать пакеты node.js с помощью NPM
NPX - это инструмент для выполнения пакетов node.js.
Неважно, установили ли вы этот пакет глобально или локально. NPX временно установит его и запустит. NPM также может запускать пакеты, если вы настроите файл package.json и включите его в раздел сценария.
So remember this, if you want to check/run a node package quickly without installing locally or globally use NPX.
npM - Менеджер
npИкс - Выполнить - легко запомнить
Не могли бы вы подробнее рассказать о «временно». Вы имеете в виду, что двоичные файлы выбрасываются после выполнения команды, заставляя npx повторно загружать двоичные файлы каждый time?
@JimAho Да. npx будет каждый раз повторно загружать пакет и его зависимости. Если производительность является фактором, вы можете установить пакет и выполнить его с чем-то другим, кроме npx. (например: npm run my-package)
Я думаю, что "временно" означает, что автор пакета не хочет, чтобы пользователи знали, где установлен пакет, а затем повторно использовали его снова и снова, потому что пакет может потребоваться обновить в ночное время ...
«Неважно, установили ли вы этот пакет глобально или локально. NPX временно установит его и запустит». Я не могу воспроизвести на npx 6.14.11 например в npm install --save vaca;npx vaca npx не скачивает повторно: stackoverflow.com/questions/49302438/…
Простое определение:
npm - менеджер пакетов Javascript
npx - запускает двоичные файлы пакета npm
Вот пример того, как может выглядеть создание вашего приложения с использованием npx.
npx create-react-app project-name --template all
На самом деле, я пробовал много способов решить эту проблему и потерпел неудачу, но в конце концов удаление / удалениепряжа глобальнорешает проблему
просто введите эту команду в терминале командной строки:
npm uninstall -g yarn
А затем запустите приведенную ниже команду, чтобы установить проект React Starter.
npx create-react-app
create-react-app- генератор.npxпереходит к Интернет, временно загружая пакет, чтобы он мог его выполнить (npИкс). Вы получаете (и хотите) результат, который сохраняется локально там, где вы запускали команду.