npm install vs update - apa bedanya?

520

Apa perbedaan praktis antara npm installdan npm update? Kapan saya harus menggunakan yang mana?

Borek Bernard
sumber

Jawaban:

655

Perbedaan antara instalasi npm dan penanganan pembaruan npm dari versi paket yang ditentukan dalam 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
  }
}

Ringkasan : Satu-satunya perbedaan besar adalah modul yang sudah diinstal dengan versi fuzzy ...

  • diabaikan oleh npm install
  • diperbarui oleh npm update

Selain itu : installdan updatesecara default menangani devDependencies secara berbeda

  • npm installakan menginstal / memperbarui devDependencies kecuali --productionflag ditambahkan
  • npm updateakan mengabaikan devDependencies kecuali --devflag ditambahkan

Kenapa pakai npm installsama sekali?

Karena npm installtidak lebih ketika Anda melihat selain menangani dependensi Anda di package.json. Seperti yang Anda lihat di instal npm, Anda dapat ...

  • menginstal modul-node secara manual
  • atur mereka sebagai global (yang menempatkan mereka di shell PATH) menggunakannpm install -g <name>
  • instal versi tertentu yang dijelaskan oleh git tag
  • instal dari url git
  • paksa instal ulang dengan --force
xanderiel
sumber
20
dan bagaimana ~1.3?
Offirmo
6
bagaimana jika versinya seperti ^ 5.0.9? Dan mungkinkah membuat npm install --save somePackagesave * ke dependensi?
KwiZ
5
Saya juga mencatat bahwa skrip suka postinstalldijalankan saat diinstal, tetapi tidak saat diperbarui.
Michael Marvick
2
Jika installdan updatebekerja secara berbeda pada URL git, tag git, dll. Yang ditentukan dalam package.jsonmaka alangkah baiknya menambahkan kasus-kasus tersebut ke dalam contoh.
joeytwiddle
2
@Offirmo tilde dalam versi fuzzy berarti "perbarui ke rilis minor (bugfix) terbaru dari paket ini", versi minor menjadi nomor terakhir dalam versi, yaitu 1.3.0 -> 1.3.1Ini mirip dengan ^1.3.0, di mana ^pembaruan versi utama, yaitu 1.3.0 -> 1.4.0.
Boyan Kushlev
82

npm install menginstal semua modul yang terdaftar pada package.jsonfile dan dependensinya.

Pembaruan npm memperbarui semua paket dalam node_modulesdirektori dan dependensinya.

npm install express menginstal hanya module express dan dependensinya.

npm update express update express module (dimulai dengan [email protected], ia tidak memperbarui dependensinya).

Jadi pembaruan adalah untuk saat Anda sudah memiliki modul dan ingin mendapatkan versi baru.

berkata
sumber
5
jika Anda tidak menentukan versi tertentu dalam file package.json, instalasi npm akan mendapatkan versi terbaru dari sebuah modul. Jadi ini semacam pembaruan.
saeed
11
Jadi apa yang harus saya gunakan, npm installatau npm update? Atau, dengan kata lain, saya sekarang menggunakan npm installdan tampaknya melakukan pembaruan juga, adakah alasan mengapa saya harus menggunakan npm update?
Borek Bernard
4
Jadi updateakan selalu memperbarui ke versi terbaru, terlepas dari package.json, sementara installakan menghormati versi yang diberikan dalam package.json?
Borek Bernard
1
updatemenginstal (atau memperbarui ke) versi terbaru dari modul. installmenginstal versi terbaru dari modul jika tidak disajikan jika tidak membuat versi saat ini.
tenphi
11
@ Borek npm updateakan memperbarui ke versi terbaru berdasarkan pada package.json Anda, tidak peduli itu Jika Anda memiliki "express": "3.x" dan Anda berada pada versi 3.1.0, itu akan diperbarui ke tag 3.x terbaru. Jika ada versi 4.x, itu tidak akan menginstal yang terbaru.
gcochard
47

Dalam kebanyakan kasus, ini akan menginstal versi terbaru dari modul yang diterbitkan pada npm.

npm install express --save

atau lebih baik untuk meningkatkan modul ke penggunaan versi terbaru:

npm install express@latest --save --force

--save: Paket akan muncul di dependensi Anda.

Info lebih lanjut: npm-install

jmav
sumber
11
npm install express@latest --save --forcepersis apa yang saya inginkan.
ThomasReggi
2
Umumnya? Ada kasus lain?
Dmitri Zaitsev
9

Banyak perbedaan telah disebutkan. Ini satu lagi:

Menjalankan npm installdi bagian atas direktori source Anda akan menjalankan berbagai script: prepublish, preinstall, install, postinstall. Bergantung pada apa yang dilakukan oleh skrip-skrip ini, a npm installdapat melakukan lebih banyak pekerjaan daripada hanya menginstal dependensi.

Saya baru saja menggunakan use case di mana prepublishakan menelepon makedan Makefiledirancang untuk mengambil dependensi jika package.jsonsudah diperbarui. Memanggil npm installdari dalam Makefileakan menyebabkan rekursi yang tak terbatas, sementara panggilan npm updatebekerja dengan baik, menginstal semua dependensi sehingga build dapat dilanjutkan meskipun makedipanggil secara langsung.

MvG
sumber
1
Salah satu implikasinya adalah bahwa jika Anda memperbarui, misalnya, redismodul Anda , dan other_modulememerlukan versi yang lebih lama redis, npm install other_moduleakan menjamin bahwa other_moduleakan menggunakan versi yang lebih lama. Itu dapat menambahkan other_module/node_modules/redisjika perlu.
jlukanta
4

npm update: instal dan perbarui dengan modul simpul terbaru yang ada di package.json

npm install: instal modul simpul yang didefinisikan dalam package.json (tanpa pembaruan)

DSK
sumber
Menggunakan npm versi 6.9.0 Saya mengamati perilaku berikut: npm updateakan menghilangkan sejumlah besar dependensi di package-lock.json. Untuk memiliki semua paket yang diperlukan tersedia dan package-lock.jsonuntuk menjadi benar, saya selalu harus mengeksekusi npm installsetelahnya npm update.
Manfred