Apa perbedaan antara npm install dan npm run build?

113

Apa perbedaan antara npm installdan npm run build?

Saya telah memperhatikan dalam proyek saya bahwa kadang-kadang npm mulai gagal ketika npm installdilakukan, tetapi, saat berjalan npm run build, itu berfungsi dengan baik.

Bagaimana cara kerja kedua target ini installdan run buildberbeda?

BalajiK
sumber
1
Jawaban yang diterima sampai sekarang masih bisa diperdebatkan. Saya pikir jawaban dari MKP dan CTS_AE, lebih relevan pada saat ini. Dengan hormat, Ini harus mendapat pemberitahuan dari moderator & / atau orang yang mengajukan pertanyaan ini.
Suhas Chikkanna

Jawaban:

69

npm installmenginstal dependensi ke dalam node_modules/direktori, untuk proyek node yang sedang Anda kerjakan. Anda dapat memanggil installproyek node.js (modul) lain, untuk menginstalnya sebagai dependensi untuk proyek Anda.

npm run buildadalah alias untuk npm build, dan tidak melakukan apa-apa kecuali Anda menentukan apa yang "build" lakukan di file package.json Anda. Ini memungkinkan Anda melakukan tugas pembangunan / persiapan yang diperlukan untuk proyek Anda, sebelum digunakan di proyek lain.

builddipanggil oleh linkdan installperintah, menurut dokumentasi untuk build :

Ini adalah perintah pipa yang dipanggil oleh npm link dan npm install.

Churro
sumber
37
Downvoted sejak @MKP mengatakan npm run builddan npm buildyang tidak sama. Saya akan memberi suara positif lagi jika Anda dapat membuktikan bahwa mereka memang sama atau mengoreksi jawaban Anda.
Hendy Irawan
Setelah merujuk jawaban yang benar dari tautan di bawah ini, saya juga berpikir demikian npm builddan npm run buildtidak sama. IMHO, Mungkin jawaban @churro di atas perlu diperbaiki. Tolong koreksi saya jika saya salah. stackoverflow.com/questions/29939697/…
Suhas Chikkanna
1
Sayangnya @HendyIrawan benar dan mereka bukan perintah yang sama, ini adalah jawaban yang sangat dipilih yang dapat membingungkan sebagian orang. Saya yakin itu harus diperbarui.
rdarioduarte
79

NPM pada 2019

npm buildtidak ada lagi. Anda harus menelepon npm run buildsekarang. Info selengkapnya di bawah.

TLDR;

npm install: menginstal dependensi, lalu memanggil installdari package.json scriptslapangan.

npm run build: menjalankan bidang pembuatan dari package.json scriptslapangan.


Bidang Skrip NPM

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

Ada banyak hal yang dapat Anda masukkan ke dalam package.jsonbidang skrip npm . Lihat tautan dokumentasi di atas lebih lanjut di atas siklus hidup skrip - sebagian besar memiliki kait pra dan posting yang dapat Anda jalankan skrip sebelum / setelah menginstal, menerbitkan, mencopot, menguji, memulai, menghentikan, menyusut, versi.


Untuk Hal-Hal Rumit

  • npm install tidak sama dengan npm run install
  • npm installmenginstal package.jsondependensi, lalu menjalankanpackage.json scripts.install
    • (Pada dasarnya panggilan npm run installsetelah dependensi diinstal.
  • npm run installhanya menjalankan package.json scripts.install, itu tidak akan menginstal dependensi .
  • npm builddigunakan untuk menjadi perintah yang valid (dulu sama dengan npm run build) tetapi sekarang tidak lagi; sekarang menjadi perintah internal. Jika Anda menjalankannya, Anda akan mendapatkan: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Anda dapat membaca lebih lanjut di dokumentasi: https://docs.npmjs.com/cli/build
CTS_AE
sumber
5
+1 Tapi itu membingungkan untuk mengatakan npm buildtidak ada lagi. Ini masih keluar dalam arti dikenal / khusus untuk npm, karena bereaksi dengan peringatan yang Anda sebutkan di bagian bawah. Pada dasarnya itu tidak melakukan apa-apa sekarang. Jawaban ini ke pertanyaan lain memberikan ringkasan singkat tentang npm buildvs npm run build.
bluenote10
1
Dengan kata lain, waktunya memeriksa benang?
Moose on the Loose
44

Perbedaan utamanya adalah:

npm install adalah perintah cli npm yang melakukan hal yang telah ditentukan sebelumnya, seperti yang ditulis oleh Churro, untuk menginstal dependensi yang ditentukan di dalam package.json

npm run command-name atau npm run-script command-name ( mis. npm run build ) juga merupakan perintah cli yang ditentukan sebelumnya untuk menjalankan skrip kustom Anda dengan nama yang ditentukan di tempat "nama-perintah". Jadi, dalam hal ini npm run build adalah perintah skrip kustom dengan nama "build" dan akan melakukan apa pun yang ditentukan di dalamnya (misalnya echo 'hello world' yang diberikan dalam contoh package.json di bawah).

Ponit yang perlu diperhatikan ::

1) Satu hal lagi, npm builddan npm run builddua hal berbeda npm buildakan dilakukan seperti yang ditulis oleh Churro, tetapi npm run buildakan melakukan pekerjaan kustom yang tertulis di dalamnyapackage.json

2) Dan npm builddan npm run buildtidak sama. Yang saya maksud adalah, Anda tidak dapat menentukan beberapa hal di dalam npm run buildskrip custom build ( ) dan berharap npm builduntuk melakukan hal yang sama. Coba hal berikut untuk memverifikasi di Anda package.json:

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

dan lari npm run builddan npm buildsatu per satu dan Anda akan melihat perbedaannya. Untuk informasi lebih lanjut tentang perintah, silakan ikuti dokumentasi npm .

Bersulang!!

MKP
sumber
11
Daripada "mencoba menjalankan ini", saya akan menghargai jika Anda menjelaskan lebih detail apa perbedaan antara npm run builddan npm build. Oke jadi mereka tidak sama, dalam hal apa? Jadi jawaban @ Churro salah?
Hendy Irawan
7
Ya, apa yang npm buildmasih menjadi misteri. Senang mengetahui hal itu. Sejauh yang saya tahu, " npm buildakan melakukan apa yang ditulis oleh Churro" tidak benar. Churro mengatakan itu akan melakukan apa yang ditentukan package.jsonuntuk buildperintah (seperti yang didefinisikan di scriptsbagian saya kira). Tapi itulah yang npm run builddilakukan, dan npm buildtidak menjalankan perintah build yang ditentukan di package.json scriptsbagian. Kecuali ada cara lain untuk mendefinisikan apa yang npm buildharus dilakukan di package.json, yang tidak dijelaskan di sini, atau oleh Churro (atau dalam dokumen NPM, saya pikir, sayangnya).
trollkotze
2
Jadi saya mencobanya dan npm buildberkata npm WARN build npm builddipanggil tanpa argumen. Apakah Anda bermaksud npm run-script build? . Saya pikir itu tidak melakukan apa-apa. Setelah menghabiskan waktu untuk membaca semua jawaban di sini dan mencoba sendiri, saya masih tidak tahu apa tujuan dari npm build:(.
bluenote10
4
  • npm install menginstal dependensi di konfigurasi package.json Anda.
  • npm run build menjalankan skrip "build" dan membuat skrip yang menjalankan aplikasi Anda - katakanlah server.js
  • npm start menjalankan skrip "start" yang kemudian akan menjadi "node server.js"

Sulit untuk mengatakan dengan tepat apa masalahnya, tetapi pada dasarnya jika Anda melihat konfigurasi skrip Anda, saya kira "build" menggunakan beberapa jenis alat build untuk membuat aplikasi Anda sementara "mulai" menganggap build telah selesai tetapi kemudian gagal jika file tersebut tidak ada.

Anda mungkin menggunakan bower atau grunt - Saya sepertinya ingat bahwa aplikasi grunt yang khas akan mendefinisikan skrip tersebut serta skrip "bersih" untuk menghapus versi terakhir.

Alat build cenderung membuat file dalam folder bin /, dist /, atau build / yang kemudian dipanggil oleh skrip awal - misalnya "node build / server.js". Ketika Anda npm startgagal, itu mungkin karena Anda menelepon npm cleanatau serupa untuk menghapus versi terbaru sehingga file aplikasi Anda tidak ada yang menyebabkan npm mulai gagal.

Kode sumber npm build - untuk menyinggung diskusi dalam pertanyaan ini - ada di github untuk Anda lihat jika Anda mau. Jika Anda menjalankan npm buildsecara langsung dan memiliki skrip "build" yang ditentukan, skrip tersebut akan keluar dengan pesan kesalahan yang meminta Anda untuk memanggil skrip build npm run-script buildsehingga tidak sama dengan npm run script.

Saya tidak begitu yakin apa yang npm builddilakukannya, tetapi tampaknya ini terkait dengan skrip pasca-instalasi dan pengemasan dalam dependensi. Saya berasumsi bahwa ini mungkin memastikan bahwa setiap skrip build CLI atau pustaka asli yang diperlukan oleh dependensi dibuat untuk lingkungan tertentu setelah mengunduh paket. Ini akan menjadi alasan mengapa tautan dan instal memanggil skrip ini.

Chanoch
sumber