Npm yükleme ile npm çalıştırma derlemesi arasındaki fark nedir?


113

Arasındaki fark nedir npm installve npm run build?

Projemde, bazen npm'nin npm installgerçekleştirildiğinde başarısız olmaya başladığını , ancak çalıştırıldığında npm run buildgayet iyi çalıştığını fark ettim .

Bu iki hedefin iç işleyişi yani installve run buildfarklılığı nedir?


1
Şu an için kabul edilen cevap tartışmalı. Bence MKP ve CTS_AE'den gelen cevaplar şu anda daha alakalı. Saygı duymakla birlikte, Bu, moderatörün ve / veya bu soruyu soran kişinin bildirimine tabi olmalıdır.
Suhas Chikkanna

Yanıtlar:


70

npm installnode_modules/üzerinde çalıştığınız düğüm projesi için bağımlılıkları dizine yükler . Sen diyebilirsin installprojeniz için bir bağımlılık olarak yüklemek için, başka node.js proje (modül) üzerinde.

npm run buildiçin bir takma npm buildaddır ve package.json dosyanızda "derlemenin" ne yaptığını belirtmediğiniz sürece hiçbir şey yapmaz. Başka bir projede kullanılmadan önce projeniz için gerekli tüm bina / hazırlık görevlerini gerçekleştirmenizi sağlar.

buildderleme belgelerine göre linkve installkomutları tarafından çağrılır :

Bu, npm link ve npm install tarafından çağrılan sıhhi tesisat komutudur.


37
@MKP söylediği npm run buildve npm buildaynı olmadığı için olumsuz oy verildi . Gerçekten aynı olduklarını ispatlayabilir veya cevabınızı düzeltebilirseniz tekrar oy vereceğim.
Hendy Irawan

Aşağıdaki bağlantının doğru cevabına atıfta bulunduktan sonra, ben de düşünüyorum npm buildve npm run buildaynı değil. IMHO, Belki @ churro'dan gelen yukarıdaki cevabın düzeltilmesi gerekiyor. Yanlışım varsa lütfen düzelt. stackoverflow.com/questions/29939697/…
Suhas Chikkanna

1
Ne yazık ki @HendyIrawan haklı ve aynı komut değiller, bu bazı insanların kafasını karıştırabilecek çok oylanmış bir cevap. Güncellenmesi gerektiğine inanıyorum.
rdarioduarte

79

2019'da NPM

npm buildartık yok. npm run buildŞimdi aramalısın . Aşağıda daha fazla bilgi.

TLDR;

npm install: Yüklemeler bağımlılıklar, aranmamanızı installdan package.json scriptsalanında.

npm run build: yapı alanını sahadan çalıştırır package.json scripts.


NPM Komut Dosyaları Alanı

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

Npm package.jsonbetikleri alanına koyabileceğiniz birçok şey vardır . Komut dosyalarının yaşam döngüsünün daha yukarısındaki dokümantasyon bağlantısına göz atın - çoğu, komut dosyalarını yükleme, yayınlama, kaldırma, test etme, başlatma, durdurma, küçültme, sürümden önce / sonra çalıştırabileceğiniz ön ve son kancalara sahiptir.


İşleri Karıştırmak İçin

  • npm install ile aynı değil npm run install
  • npm installpackage.jsonbağımlılıkları yükler , ardındanpackage.json scripts.install
    • (Esasen npm run installbağımlılıklar yüklendikten sonra çağrılar .
  • npm run installSadece çalışır package.json scripts.install, bu bağımlılıkları yüklenmez .
  • npm buildeskiden geçerli bir komuttu (eskiden olduğu gibi npm run build) ama artık değil; artık dahili bir komuttur. Çalıştırırsanız şunları alırsınız: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Belgelerde daha fazlasını okuyabilirsiniz: https://docs.npmjs.com/cli/build

5
+1 Ama artık var olmadığını söylemek kafa karıştırıcı npm build. Hala npm için bilindiği / özel olduğu anlamında varlığını sürdürüyor, çünkü altta bahsettiğiniz uyarı ile tepki veriyor. Esasen artık hiçbir şey yapmıyor. Başka bir soruya verilen bu cevap , npm buildvs ile ilgili en kısa özeti verdi npm run build.
bluenote10

1
Başka bir deyişle, ipliği kontrol etme zamanı?
Moose on the Loose

44

Ana fark şudur:

npm install , Churro tarafından yazıldığı gibi, package.json içinde belirtilen bağımlılıkları yüklemek için önceden tanımlanmış şeyi yapan bir npm cli-komutudur.

npm run command-name veya npm run-script komut-adı ( örn. npm run build ) ayrıca "command-name" yerine belirtilen adla özel komut dosyalarınızı çalıştırmak için önceden tanımlanmış bir cli komutudur. Dolayısıyla, bu durumda npm run build , "build" adlı özel bir betik komutudur ve içinde belirtilen her şeyi yapar (örneğin , aşağıdaki örnek package.json'da verilen echo 'merhaba dünya' ).

Dikkat edilecek noktalar:

1) Bir şey daha var npm buildve npm run buildiki farklı şey npm buildChurro tarafından yazıldığı gibi npm run buildyapacak , ancak içeride yazılı özel işler yapacakpackage.json

2) Ve npm buildve npm run buildaynı değildir. Demek istediğim, özel build ( npm run build) komut dosyası içinde bir şey belirtemez npm buildve aynısını yapmayı bekleyemezsiniz . Aşağıdakileri doğrulamak için deneyin package.json:

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

ve koş npm run buildve npm buildbirer birer ve farkı göreceksin. Komutlar hakkında daha fazla bilgi için lütfen npm belgelerini takip edin .

Şerefe !!


11
Yerine "çalıştırmayı denediğinizde bu" sen arasındaki farkın ne daha ayrıntılı olarak açıklamak, ben memnun olurum npm run buildve npm build. Tamam öyleyse, ne şekilde aynı değiller? O halde @ Churro'nun cevabı yanlış mı?
Hendy Irawan

7
Evet, npm buildbir sır olarak kalan şey . Bunu bilmek güzel olurdu. Anladığım kadarıyla, " npm buildChurro'nun yazdığı gibi yapacak" doğru değil. Churro package.json, buildkomut için belirtilen şeyi yapacağını söyledi ( scriptssanırım bölümde tanımlandığı gibi ). Ancak bu npm run buildyapar ve bölümde npm buildbelirtilen build komutunu çalıştırmaz package.json scripts. Burada ne npm buildyapılması gerektiğini tanımlamanın başka bir yolu olmadıkça package.json, burada ne burada ne de Churro tarafından açıklanmayan (ne yazık ki UÖM belgelerinde).
trollkotze

2
Bu yüzden denedim ve npm buildadı geçen yapı WARN npm npm buildargüman olmadan denir. Demek istedin npm run-script buildmi . Sanırım hiçbir şey yapmadı. Buradaki tüm cevapları okumak için zaman harcadıktan ve bunu kendim denedikten sonra hala amacının ne olduğunu anlayamıyorum npm build:(.
bluenote10

4
  • npm install bağımlılıkları package.json yapılandırmanıza yükler.
  • npm run build "build" komut dosyasını çalıştırır ve uygulamanızı çalıştıran bir komut dosyası oluşturur - örneğin server.js
  • npm start "node server.js" olacak "start" komut dosyasını çalıştırır

Sorunun tam olarak ne olduğunu söylemek zordur, ancak temelde komut dosyası yapılandırmanıza bakarsanız, "derleme" nin uygulamanızı oluşturmak için bir tür derleme aracı kullandığını tahmin ediyorum, "başlat" ise derlemenin tamamlandığını varsayar, ancak daha sonra başarısız olur. dosya orada değil.

Muhtemelen bower veya grunt kullanıyorsunuz - tipik bir grunt uygulamasının bu komut dosyalarını ve son yapıyı silmek için "temiz" bir komut dosyası tanımlayacağını hatırlıyorum.

Derleme araçları, başlangıç ​​komut dosyasının daha sonra çağırdığı bin /, dist / veya build / klasöründe bir dosya yaratma eğilimindedir - ör. "Node build / server.js". When npm startbaşarısız aradığınız, bunun nedeni muhtemelen npm cleanveya uygulama dosyası başarısız olmasına başlamak npm neden mevcut olmadığı böylece son sürüme silmek benzer.

npm build'nin kaynak kodu - bu sorudaki tartışmaya değinmek gerekirse - isterseniz bir göz atmanız için github'da. npm buildDoğrudan çalıştırırsanız ve tanımlanmış bir "derleme" betiğiniz varsa, derleme betiğinizi çağırmanızı isteyen bir hatayla çıkacaktır, bu npm run-script buildnedenlenpm run script .

Ne yaptığından tam olarak emin değilim npm build, ancak yükleme sonrası ve bağımlılıklarda betiklerin paketlenmesi ile ilgili görünüyor. Bunun, bağımlılıkların gerektirdiği herhangi bir CLI oluşturma komut dosyalarının veya yerel kitaplıkların, paketi indirdikten sonra belirli ortam için oluşturulduğundan emin olabileceğini varsayıyorum. Bu betiği bağla ve yüklemenin nedeni bu olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.