Яка різниця між npm install та npm run build?


113

У чому різниця між npm installі npm run build?

Я помітив у своєму проекті, що іноді npm починає виходити з ладу, коли npm installвиконується, але після запуску npm run buildце працює чудово.

Як саме installі run buildвідрізняється внутрішня робота цих двох цілей ?


1
На сьогодні прийнята відповідь є дискусійною. Я думаю, що відповіді MKP та CTS_AE є більш актуальними на даний момент. З належною повагою, про це слід звернути увагу модератора та / або того, хто задав це питання.
Suhas Chikkanna

Відповіді:


69

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

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

buildвикликається командами linkта installкомандами відповідно до документації для складання :

Це команда сантехніки, яка викликається npm link та npm install.


37
Оскаржений, оскільки @MKP каже, npm run buildі npm buildвони не однакові. Я ще раз проголошу, якщо ви зможете довести, що вони дійсно однакові, або виправите свою відповідь.
Хенді Іраван

Пославшись нижче правильну відповідь посилання, я також думаю , що npm buildі npm run buildце не те ж саме. ІМХО, можливо, вищезазначену відповідь від @churro потрібно виправити. Будь ласка, виправте мене, якщо я помиляюся. stackoverflow.com/questions/29939697 / ...
Suhas Чіккан

1
На жаль, @HendyIrawan має рацію, і вони не є однаковою командою, це відповідь на високий рівень, яка може заплутати деяких людей. Я вважаю, що це повинно бути оновлено.
rdarioduarte

79

НПМ у 2019 році

npm buildбільше не існує. Ви повинні зателефонувати npm run buildзараз. Більше інформації нижче.

TLDR;

npm install: встановлює залежності, потім викликає installз package.json scriptsполя.

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


Поле сценаріїв NPM

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

У package.jsonполе сценаріїв npm можна помістити багато речей . Ознайомтесь із посиланням на документацію вище життєвого циклу сценаріїв - у більшості є гачки попереднього та після публікації, на яких можна запускати сценарії до / після встановлення, публікувати, видаляти, тестувати, запускати, зупиняти, зменшувати обертання, версію.


Щоб ускладнити речі

  • 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 command-name або npm run-script command-name ( наприклад, npm run build ) - це також команда cli, визначена для запуску власних сценаріїв з ім'ям, вказаним замість "name-name". Отже, у цьому випадку npm run build - це спеціальна команда скрипта з назвою "build" і виконуватиме все, що вказано всередині неї (наприклад, echo 'hello world', наведений нижче в прикладі package.json).

Поніць до відома:

1) Ще одна річ, npm buildі npm run buildдві різні речі npm buildбудуть робити так, як написав Чурро, але 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. Гаразд, вони не однакові, яким чином? Тож відповідь @ Churro неправильна?
Хенді Іраван

7
Так, що npm buildзалишається загадкою. Було б добре це знати. Наскільки я можу сказати, " npm buildзробимо так, як написав Чуро", це неправда. Churro сказав , що буде робити те , що вказано в package.jsonдля buildкоманди (як визначено в scriptsрозділі , я вважаю). Але це npm run buildробиться, а npm buildне виконує команду зборки, вказану в package.json scriptsрозділі. Якщо тільки не існує іншого способу визначити, що npm buildслід робити у програмі package.json, що не пояснено тут, ані Чурро (ні в документах NPM, я думаю, на жаль).
trollkotze

2
Тож я спробував це і npm buildсказав, що npm WARN build npm buildвикликає без аргументів. Ти мав на увазі npm run-script build? . Я думаю, що це нічого не зробило. Провівши час, щоб прочитати тут усі відповіді та спробувавши це, я все ще не можу сказати, у чому мета npm build:(.
bluenote10

4
  • npm install встановлює залежність у вашому config.json config.
  • 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.

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

Я не зовсім впевнений, що npm buildробить, але, схоже, це пов’язано із сценаріями після встановлення та упаковки залежно. Я припускаю, що це може бути впевненим, що будь-які бібліотеки побудови сценаріїв CLI або рідні бібліотеки, необхідні залежностям, будуються для конкретного середовища після завантаження пакету. Це буде причиною посилання та встановлення виклику цього сценарію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.