В чем разница между npm install и npm run build?


113

В чем разница между npm installи npm run build?

Я заметил в своем проекте, что иногда npm начинает давать сбой при npm installвыполнении, но после запуска npm run buildон работает нормально.

Как внутренние работы этих двух целей , а именно installи run buildотличаются?


1
Принятый на данный момент ответ остается спорным. Я думаю, что ответы MKP и CTS_AE более актуальны в данный момент. С уважением, Это должно быть замечено модератором и / или тем, кто задал этот вопрос.
Сухас Чикканна

Ответы:


70

npm installустанавливает зависимости в node_modules/каталог для проекта узла, над которым вы работаете. Вы можете вызвать installдругой проект (модуль) node.js, чтобы установить его как зависимость для вашего проекта.

npm run buildявляется псевдонимом для npm buildи ничего не делает, если вы не укажете, что делает "build" в вашем файле package.json. Он позволяет вам выполнять любые необходимые задачи по построению / подготовке вашего проекта перед его использованием в другом проекте.

buildвызывается linkи installкомандами, в соответствии с документацией для сборки :

Это команда сантехники, вызываемая npm link и npm install.


37
Downvoted так @MKP говорит npm run buildи npm buildявляются не то же самое. Я проголосую еще раз, если вы докажете, что они действительно такие же, или исправите свой ответ.
Хенди Ираван

Сославшись ниже правильный ответ ссылку, я также думаю , что npm buildи npm run buildэто не то же самое. ИМХО, возможно, ответ от @churro нужно исправить. Пожалуйста, поправьте меня, если я ошибаюсь. stackoverflow.com/questions/29939697/…
Сухас Чикканна 04

1
К сожалению, @HendyIrawan прав, и это не одна и та же команда, это высоко оцененный ответ, который может сбить с толку некоторых людей. Я считаю, что его нужно обновить.
rdarioduarte

79

НПМ в 2019 году

npm buildбольше не существует. Вы должны позвонить npm run buildсейчас. Более подробная информация ниже.

TL; DR;

npm install: устанавливает зависимости, затем вызывает installиз package.json scriptsполя.

npm run build: запускает поле сборки из package.json scriptsполя.


Поле сценариев NPM

https://docs.npmjs.com/misc/scripts

Есть много вещей, которые вы можете поместить в package.jsonполе сценариев npm . Ознакомьтесь с приведенной выше ссылкой на документацию над жизненным циклом скриптов - большинство из них имеют pre и post хуки, с помощью которых вы можете запускать скрипты до / после установки, публикации, удаления, тестирования, запуска, остановки, сжатия, версии.


Усложнять вещи

  • npm install это не то же самое, что npm run install
  • npm installустанавливает package.jsonзависимости, затем запускаетpackage.json scripts.install
    • (По сути, вызовы npm run installпосле установки зависимостей.
  • npm run installтолько запускает package.json scripts.install, он не устанавливает зависимости .
  • npm buildраньше была допустимой командой (раньше была такой же, как npm run build), но теперь это не так; теперь это внутренняя команда. Если вы запустите его, вы получите: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Подробнее см. В документации: https://docs.npmjs.com/cli/build.

5
+1 Но сказать, npm buildчто больше не существует , сбивает с толку . Он по-прежнему существует в том смысле, что он известен / особенный для npm, потому что он реагирует предупреждением, которое вы упоминаете внизу. По сути, сейчас он ничего не делает. Этот ответ на другой вопрос дал кратчайшее резюме по npm buildсравнению npm run build.
bluenote10

1
Другими словами, пора проверить пряжу?
Moose on the Loose

44

Основное отличие:

npm install - это команда npm cli, которая выполняет предопределенную вещь, то есть, как написано Churro, для установки зависимостей, указанных внутри package.json

npm run имя-команды или npm run-script имя-команды ( например, npm run build ) также является предопределенной командой cli для запуска ваших пользовательских сценариев с именем, указанным вместо «имя-команды». Итак, в этом случае npm run build - это настраиваемая команда сценария с именем «build», которая будет делать все, что указано внутри нее (например, echo 'hello world', приведенное в примере ниже package.json).

Пониц на заметку:

1) Еще одна вещь, npm buildи npm run buildэто две разные вещи, которые npm buildбудут делать, как написано Churro, но npm run buildбудут выполнять индивидуальную работу, написанную внутриpackage.json

2) И npm buildи npm run buildне одно и то же. Я имею в виду, что вы не можете указать что-то внутри пользовательского npm run buildскрипта build ( ) и ожидать npm buildтого же. Попробуйте следующее, чтобы проверить в своем package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

и запустить npm run buildи npm buildодин на один , и вы увидите разницу. Для получения дополнительной информации о командах следуйте документации npm .

Ура !!


11
Вместо того, чтобы «попытаться запустить это», я был бы признателен, если бы вы более подробно объяснили, в чем разница между npm run buildи npm build. Хорошо, они не такие, в каком смысле? Значит, ответ @Curro неверен?
Хенди Ираван

7
Ага, что npm buildтам остается загадкой. Было бы неплохо это узнать. Насколько я могу судить, « npm buildбудет делать , как написано Churro» это не так. Churro сказал , что будет делать то , что указано в package.jsonдля buildкоманды (как определено в scriptsразделе , я полагаю). Но это то, что npm run buildработает, а npm buildне запускает команду сборки, указанную в package.json scriptsразделе. Если нет другого способа определить, что npm buildследует делать в package.jsonфайле, который не объясняется здесь или Churro (или, к сожалению, в документах NPM).
trollkotze 07

2
Итак, я попробовал и npm buildсказал, что сборка npm WARN вызывается npm buildбез аргументов. Вы хотели npm run-script build? . Я думаю, это ничего не дало. Потратив время на то, чтобы прочитать все ответы здесь и попробовать это сам, я все еще не могу сказать, в чем цель npm build:(.
bluenote10

4
  • npm install устанавливает зависимости в вашей конфигурации package.json.
  • npm run build запускает сценарий "build" и создает сценарий, запускающий ваше приложение - скажем, server.js
  • npm start запускает сценарий "start", который затем будет "node server.js"

Трудно точно сказать, в чем была проблема, но в основном, если вы посмотрите на конфигурацию своих скриптов, я бы предположил, что «build» использует какой-то инструмент сборки для создания вашего приложения, в то время как «start» предполагает, что сборка была выполнена, но затем терпит неудачу, если файла нет.

Вы, вероятно, используете bower или grunt - я, кажется, помню, что типичное приложение grunt будет определять эти сценарии, а также «чистый» сценарий для удаления последней сборки.

Инструменты сборки обычно создают файл в папке bin /, dist / или build /, которую затем вызывает сценарий запуска - например, «node build / server.js». Когда вы npm startтерпите неудачу, это, вероятно, связано с тем, что вы вызвали npm cleanили похожи на удаление последней сборки, поэтому файл вашего приложения отсутствует, что приводит к сбою npm start.

Исходный код сборки npm - чтобы коснуться обсуждения в этом вопросе - находится в github, чтобы вы могли посмотреть, если хотите. Если вы запустите npm buildнапрямую и у вас определен сценарий "сборки", он завершится с ошибкой, предлагающей вам вызвать сценарий сборки, npm run-script buildпоэтому он не совпадает с npm run script.

Я не совсем уверен, что npm buildделает, но, похоже, это связано с постинсталляционными и упаковочными скриптами в зависимостях. Я предполагаю, что это может гарантировать, что любые сценарии сборки CLI или собственные библиотеки, требуемые зависимостями, созданы для конкретной среды после загрузки пакета. Вот почему ссылка и установка вызывают этот скрипт.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.