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

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

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

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

create-react-app - генератор. npx переходит к Интернет, временно загружая пакет, чтобы он мог его выполнить (npИкс). Вы получаете (и хотите) результат, который сохраняется локально там, где вы запускали команду.
vsync 23.09.2018 10:58

В этом посте объясняется, почему использовать npx на примере thecodeframework.com/…

Gagan 20.07.2020 06:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
704
3
251 227
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

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 для получения дополнительной информации.

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

user9315861 28.07.2018 05:57

NPX:

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

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

Neil 20.08.2018 10:37
NPM can just install local versions - не правильно. npm можно установить глобально, и это обычная практика.
vsync 25.08.2018 17:00

Отличное введение в NPX можно найти здесь: medium.com/@maybekatz/…, Кэт Марчан.

Jeff Hu 05.09.2018 02:41

@vsync Я считаю, что это следует интерпретировать как «NPM может просто устанавливать локальные версии, и все готово». вместо того, чтобы подразумевать ограничение.

YipYip 08.11.2018 00:29
Ответ принят как подходящий

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

NPM - пакеты Управляетно не облегчает жизнь выполнение any.
NPX - инструмент для пакетов узлов выполнение.

NPX comes bundled with NPM version 5.2+

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

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

  1. Установки местный имеют "ссылки", созданные в каталоге ./node_modules/.bin/.
  2. Установки Глобальный имеют «ссылки», созданные из глобального каталога 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:

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


Связанные вопросы:

  1. Как использовать пакет, установленный локально в node_modules?
  2. NPM: как получить папку ./node_modules/.bin?
  3. Как запустить js-файл с помощью сценариев npm?

Так что реагируйте, не используйте node.js, верно? Почему он доступен через npm (диспетчер пакетов узлов)?

winklerrr 27.03.2019 15:57

Несколько лет назад был Беседка для управления пакетами внешнего интерфейса, но его использование резко упало в пользу npm. Среди некоторых причин вы можете просто использовать один диспетчер пакетов для всего, что связано с javascript, и вы также можете использовать общие разрешения js для разработки проектов внешнего интерфейса. Вы можете проверить этот ответ для получения дополнительной информации. Что касается реакции: нет, он не использует напрямую node, хотя вы также можете использовать его в node! (например, рендеринг на стороне сервера)

RecuencoJones 04.04.2019 17:37

@RecuencoJones - Вы прокомментировали мой ответ вместо OP

vsync 04.04.2019 19:35

Да, я забыл упомянуть @winklerrr, я обращался к его комментарию

RecuencoJones 05.04.2019 08:31

Я думаю, что наиболее полезной функцией является установка пакета NPX, когда он еще не установлен. В противном случае добавьте ./node_modules/.bin в свой $ PATH, и NPX не понадобится.

Ron E 06.10.2019 16:25

Мне показалось, что первая ссылка от создателя npx была ужасной. Она хвастается тем, что npx заменяет существующие хаки npm, но не объясняет, что на самом деле делает npx при запуске. Если вы не знакомы со старыми хитростями npm, вы прочтете эту статью и потеряете интерес.

Donato 20.03.2020 00:12

Если вы используете пакет npx-ing несколько раз, есть смысл установить его локально или глобально. Потому что каждый раз, когда вы выполняете пакет через npx, он запускается и удаляется. Комментарий владельца npx: github.com/zkat/npx/issues/113#issuecomment-329848019

mashi 05.05.2020 03:36

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

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

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

Где он его устанавливает и удаляет ли он после завершения команды, или он кэширует его в течение некоторого времени, или всегда проверяет, что у вас самая последняя версия пакета?

redOctober13 24.07.2019 15:08

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

Simon B. 11.05.2020 14:55

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?

Jim Aho 15.05.2020 22:38

@JimAho Да. npx будет каждый раз повторно загружать пакет и его зависимости. Если производительность является фактором, вы можете установить пакет и выполнить его с чем-то другим, кроме npx. (например: npm run my-package)

Émile Perron 01.08.2020 23:56

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

themefield 01.01.2021 06:44

«Неважно, установили ли вы этот пакет глобально или локально. NPX временно установит его и запустит». Я не могу воспроизвести на npx 6.14.11 например в npm install --save vaca;npx vaca npx не скачивает повторно: stackoverflow.com/questions/49302438/…

Ciro Santilli 新疆再教育营六四事件法轮功郝海东 23.04.2021 21:40

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

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

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

Вот пример того, как может выглядеть создание вашего приложения с использованием npx.

npx create-react-app project-name --template all

На самом деле, я пробовал много способов решить эту проблему и потерпел неудачу, но в конце концов удаление / удалениепряжа глобальнорешает проблему

просто введите эту команду в терминале командной строки:

npm uninstall -g yarn

А затем запустите приведенную ниже команду, чтобы установить проект React Starter.

npx create-react-app

Другие вопросы по теме