npm install vs update - в чому різниця?


519

У чому полягає практична різниця між npm installта npm update? Коли я повинен використовувати який?

Відповіді:


654

Різниця між npm встановленням та npm-оновленням обробки версій пакета, зазначених у package.json :

{
  "name":          "my-project",
  "version":       "1.0",                             // install   update
  "dependencies":  {                                  // ------------------
    "already-installed-versionless-module":  "*",     // ignores   "1.0" -> "1.1"
    "already-installed-semver-module":       "^1.4.3" // ignores   "1.4.3" -> "1.5.2"
    "already-installed-versioned-module":    "3.4.1"  // ignores   ignores
    "not-yet-installed-versionless-module":  "*",     // installs  installs
    "not-yet-installed-semver-module":       "^4.2.1" // installs  installs
    "not-yet-installed-versioned-module":    "2.7.8"  // installs  installs
  }
}

Резюме : Єдина велика різниця полягає в тому, що вже встановлений модуль з нечіткою версією ...

  • ігнорується npm install
  • оновлюється користувачем npm update

Додатково : installі updateза замовчуванням обробляйте devDependitions по-різному

  • npm installбуде встановлювати / оновлювати devDependencies , якщо тільки--production не буде доданий прапор
  • npm updateбуде ігнорувати devDependitions, якщо не --devбуде додано прапор

Навіщо використовувати npm install взагалі?

Тому що npm installробить більше, коли дивишся, крім того, щоб працювати зі своїми залежностями package.json. Як ви бачите в npm встановлення, ви можете ...

  • вручну встановити вузлові модулі
  • встановити їх як глобальні (що ставить їх у оболонкиPATH ), використовуючиnpm install -g <name>
  • встановити певні версії, описані git тегами
  • встановити з git url
  • примусити перевстановити --force

20
а про що ~1.3?
Offirmo

6
що робити, якщо версія схожа на ^ 5.0.9? І чи можна зробити npm install --save somePackageзбереження * до залежностей?
KwiZ

5
Я також зазначу, що такі сценарії, як postinstallзапуск при встановленні, але не при оновленні.
Михайло Марвік

2
Якщо installі по- updateрізному працювати над URL-адресами git, тегами git тощо, зазначеними в package.jsonтоді, було б чудово додати ці випадки до прикладу.
joeytwiddle

2
@Offirmo тильда у нечіткій версії означає "оновлення до останнього другорядного (помилка) випуску цього пакета", причому другорядна версія є останнім номером у версії, тобто 1.3.0 -> 1.3.1це аналогічно тому ^1.3.0, де ^оновлення основної версії, тобто 1.3.0 -> 1.4.0.
Боян Кушльов

82

npm install встановлює всі модулі, перелічені у спискуpackage.json файлі та їх залежності.

npm update оновлює всі пакети в node_modulesкаталозі та їх залежності.

npm install express встановлює лише експрес-модуль та його залежності.

npm update express express module (починаючи з npm@2.x, він не оновлює свої залежності).

Тож оновлення призначені для того, коли у вас вже є модуль і хочете отримати нову версію.


5
якщо не вказати конкретну версію у файлі package.json, npm install отримає останню версію модуля. Так що це своєрідне оновлення.
saeed

11
Отже, що я повинен використовувати, npm installабо npm update? Або, інакше кажучи, я зараз використовую, npm installі, здається, також роблю оновлення, чи є якась причина, чому я коли-небудь повинен використовувати npm update?
Борек Бернар

4
Тож updateзавжди буде оновлюватися до останньої версії, незалежно від package.json, при цьому installбуде дотримуватися версія, надана в package.json?
Борек Бернар

1
updateвстановлює (або оновлює) останню версію модуля. installвстановлює останню версію модуля, якщо його не представлено, інакше зберігається поточна версія.
tenphi

11
@Borek npm updateоновить до останньої версії на основі пакету.json, незалежно від нього. Якщо у вас є "express": "3.x" і ви користуєтеся версією 3.1.0, він буде оновлений до останнього тега 3.x. Якщо є версія 4.x, вона не встановить останню.
gcochard

47

У більшості випадків це встановить останню версію модуля, опубліковану в npm.

npm install express --save

або краще оновити модуль до використання останньої версії:

npm install express@latest --save --force

--save: Пакет з’явиться у ваших залежностях.

Більше інформації: npm-install


11
npm install express@latest --save --forceбуло саме те, чого я хотів.
ThomasReggi

2
В більшості випадків? Будь-які інші випадки?
Дмитро Зайцев

9

Про багато відмінностей уже згадувалося. Ось ще один:

Запуск npm installу верхній частині вихідного каталогу буде запускати різні сценарії: prepublish, preinstall, install, postinstall. Залежно від того, що роблять ці сценарії, anpm install може зробити набагато більше роботи, ніж просто встановити залежності.

У мене щойно був випадок використання, де prepublishзателефонував би, makeа the Makefileбув розроблений для отримання залежностей, якщо package.jsonоновлення оновлено. Виклик npm installзсередини Makefileможе призвести до нескінченної рекурсії, тоді як виклик npm updateспрацював чудово, встановивши всі залежності, щоб збірка могла продовжуватися, навіть якщо makeвикликали безпосередньо.


1
Одне із наслідків полягає в тому, що якщо ви оновили, наприклад, свій redisмодуль, і вам other_moduleпотрібна старіша версія redis,npm install other_module гарантуєте, що other_moduleбуде використовувати старішу версію. Він може додати other_module/node_modules/redisпри необхідності.
jlukanta

4

npm update: встановити та оновити останні модулі вузлів, які знаходяться в package.json

npm install: встановити модулі вузлів, які визначені у package.json (без оновлення)


Використовуючи npm версії 6.9.0, я спостерігаю таку поведінку: npm updateопускатимуть велику кількість залежностей у package-lock.json. Щоб усі необхідні пакети були доступні та package-lock.jsonбули коректними, я завжди повинен виконувати npm installвідразу після npm update.
Манфред
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.