Разница между npx и npm?

517

Я только начал изучать React, и Facebook помогает упростить первоначальную настройку, предоставив следующий готовый проект .

Если мне нужно установить каркасный проект, я должен ввести npx create-react-app my-appв командной строке.

Мне было интересно, почему Facebook в Github есть, npx create-react-app my-appа не npm create-react-app my-app?

Пареш Манияр
источник
23
create-react-appэто генератор. npxидет в интернет , временно загружая пакет, чтобы он мог его выполнить ( np x ). То, что вы получаете (и хотите), является выводом, который сохраняется локально, где вы выполнили команду.
Вс

Ответы:

644

Представляем npx: менеджер пакетов npm

NPM- Управляет пакеты , но не делает жизнь легко выполнения любой.
NPX- Инструмент для выполнения пакетов Node.

NPXпоставляется в комплекте с NPMверсией5.2+

NPMсам по себе не просто запустить какой-либо пакет. фактически он не запускает ни одного пакета. Если вы хотите запустить пакет с помощью NPM, вы должны указать этот пакет в своем package.jsonфайле.

Когда исполняемые файлы устанавливаются через пакеты NPM, NPM связывается с ними:

  1. локальные установки имеют «ссылки», созданные в ./node_modules/.bin/каталоге.
  2. Глобальные установки имеют «ссылки», созданные из глобального bin/каталога (например /usr/local/bin) в Linux или в %AppData%/npmWindows.

Документация, которую вы должны прочитать


NPM:

Можно установить пакет локально на определенный проект:

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:

npxпроверит, <command>существует $PATHли он в локальных или локальных двоичных файлах проекта, и выполнит его. Итак, для приведенного выше примера, если вы хотите выполнить локально установленный пакет, some-packageвсе что вам нужно сделать, это набрать:

npx some-package

Еще одним важным преимуществом npxявляется возможность выполнения пакета, который ранее не был установлен:

$ npx create-react-app my-app

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


Смежные вопросы:

  1. Как использовать пакет, установленный локально в node_modules?
  2. NPM: как получить исходную папку ./node_modules/.bin?
  3. Как вы запускаете файл js, используя скрипты npm?
VSync
источник
2
Так что реагировать не пользуюсь node.js, верно? Почему он доступен через 'npm' (менеджер пакетов узлов)?
winklerrr
3
Несколько лет назад существовал Bower для управления пакетами внешнего интерфейса, но его использование резко упало в пользу npm. По ряду причин вы можете просто использовать один менеджер пакетов для всего, что связано с javascript, а также можете использовать разрешения commonjs для разработки внешних приложений. Вы можете проверить этот ответ для получения дополнительной информации. Что касается реакции: нет, он не использует узел напрямую, хотя вы можете использовать его и в узле! (например: на стороне сервера визуализации)
RecuencoJones
1
@RecuencoJones - Вы прокомментировали мой ответ вместо OP
vsync
1
Да, я забыл упомянуть @winklerrr, я обращался к его комментарий
RecuencoJones
1
Я думаю, что наиболее полезной функцией является установка пакета NPX, когда он еще не установлен. В противном случае добавить ./node_modules/.binк вашему $ PATH и NPX не нужно.
Рон Э
78

npx - это менеджер пакетов npm (вероятно, x обозначает eXecute). Типичное использование - загрузка и запуск пакета временно или для ознакомительных испытаний.

create-response-app - это пакет npm, который, как ожидается, будет запущен только один раз в жизненном цикле проекта. Следовательно, предпочтительно использовать npx для установки и запуска за один шаг.

Как упоминалось в справочной странице https://www.npmjs.com/package/npx , npx по умолчанию может запускать команды в PATH или из node_modules / .bin.

Примечание. С некоторыми копиями мы можем обнаружить, что create-реагировать на приложение указывает на файл Javascript (возможно, на /usr/lib/node_modules/create-react-app/index.js в системах Linux), который выполняется в среде узла , Это просто глобальный инструмент, который делает некоторые проверки. Фактическая настройка выполняется по реагирующим скриптам, последняя версия которых установлена ​​в проекте. Обратитесь к https://github.com/facebook/create-react-app для получения дополнительной информации.

DWW
источник
2
Типичное использование - запуск версии, уже установленной локально или глобально, так же часто, как и загрузка и запуск пакета.
69

NPM - менеджер пакетов, вы можете устанавливать пакеты node.js, используя NPM

NPX - это инструмент для выполнения пакетов node.js.

Неважно, установили ли вы этот пакет глобально или локально. NPX временно установит его и запустит. NPM также может запускать пакеты, если вы настроите файл package.json и включите его в раздел сценариев.

Помните об этом, если вы хотите быстро проверить / запустить пакет узла без локальной или глобальной установки, используйте NPX.

нп м - менеджер

NP X - Выполнить - легко запомнить

cherankrish
источник
Краткое и ясное объяснение
Barış Serkan AKIN
Гораздо лучше, чем длинные блоги, которые я прочитал.
Мохан Гундлапалли
Можете немного рассказать о «временно». Вы имеете в виду, что двоичные файлы выбрасываются после выполнения команды, заставляя npx перезагружать двоичные файлы каждый раз?
Джим Ахо
49

NPX:

Из https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/ :

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

Но глобальная установка вызвала столько проблем, сколько она решила. Проекты могут зависеть от разных версий инструментов командной строки, и загрязнение операционной системы множеством специфических для разработки инструментов CLI также невелико. Сегодня большинство разработчиков предпочитают устанавливать инструменты локально и оставить все как есть.

Локальные версии инструментов позволяют разработчикам извлекать проекты из GitHub, не беспокоясь о несовместимости с глобально установленными версиями инструментов. NPM может просто установить локальные версии, и все готово. Но установки, специфичные для проекта, не обходятся без проблем: как запустить правильную версию инструмента без указания его точного местоположения в проекте или использования псевдонимов?

Это проблема, которую решает npx. Новый инструмент, включенный в NPM 5.2, npx - это небольшая утилита, которая достаточно умна, чтобы запускать правильное приложение, когда оно вызывается из проекта.

Например, если вы хотите запустить локальную для проекта версию mocha, вы можете запустить npx mocha внутри проекта, и она будет делать то, что вы ожидаете.

Полезным побочным преимуществом npx является то, что он автоматически устанавливает пакеты npm, которые еще не установлены. Итак, как отмечает создатель инструмента Кэт Марчан, вы можете запустить npx benny-hill без необходимости бороться с Benny Hill, загрязняющим глобальную среду.

Если вы хотите взять npx за спин, обновитесь до последней версии npm.

Венкат Ч
источник
Если вы используете nvm-windows, вы, вероятно, не получите npx с npm, но вам нужно установить его вручную! нпм я -г нпх
Нил
1
NPM can just install local versions- неправильно. npmможно установить глобально, и это обычная практика.
вс
1
Отличное введение в NPX можно найти здесь: medium.com/@maybekatz/… , Kat Marchán.
Джефф Ху
1
@vsync Я считаю, что это следует интерпретировать как «NPM может просто установить локальные версии, и все готово ». вместо того, чтобы подразумевать ограничение.
YipYip
37

npx запускает команду пакета без явной его установки.

Случаи использования:

  • Вы не хотите устанавливать пакеты ни глобально, ни локально.
  • У вас нет разрешения на его глобальную установку.
  • Просто хочу проверить некоторые команды.

Синтаксис:

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:

Нин Фам
источник
18

Простое определение:

npm - менеджер пакетов Javascript

npx - выполнить двоичные файлы пакета npm

Яссин Корайш
источник
7

Вот пример NPX в действии: npx cowsay hello

Если вы введете это в свой терминал bash, вы увидите результат. Преимущество этого в том, что npx временно установил cowsay. Там нет загрязнения пакета, так как коровье не установлено постоянно. Это отлично подходит для одноразовых упаковок, где вы хотите избежать загрязнения упаковки.

Как упоминалось в других ответах, npx также очень полезен в тех случаях, когда (с npm) необходимо установить пакет и настроить его перед запуском. Например, вместо использования npm для установки и настройки файла json.package, а затем для вызова настроенной команды запуска просто используйте вместо него npx. Реальный пример: npx create-Reaction-app my-app

Risteard
источник
3
Где он его устанавливает и удаляет ли он после завершения команды, или он кеширует его в течение некоторого времени, или всегда проверяет, что у вас самая последняя версия пакета?
redOctober13,
@ redOctober13 есть некоторое кеширование, но npx также каждый раз запрашивает в реестре npm новейшую версию, поэтому кеширование не сильно помогает со скоростью. И это расширяет, а затем очищает зависимости каждый раз.
Саймон Б.