NPM yerine İplik ne zaman kullanılır? Farklılıklar nedir?


109

İplik ve NPM arasındaki farklar nelerdir ? Bu soruyu yazdığım sırada, İnternette sadece bunun gibi bir NPM komutunun İplik eşdeğerinin ne olduğunu gösteren bazı makaleler bulabiliyorum .

Aynı işlevlere sahipler mi (Yarn'ın yerel önbelleğe alma yaptığını ve bir paketi yalnızca bir kez indirmeniz gerekiyor gibi göründüğünü biliyorum) ancak bunun dışında NPM'den İplik'e geçmenin herhangi bir faydası var mı?


12
Bu kötü bir soru değil ve olumsuz oyu hak etmiyor. Bununla birlikte, gerçekten iyi bir soru haline gelmesi için biraz açıklığa kavuşturulması gerekiyor.
jedd.ahyoung

Hızlı bir Google çıkıyor bu . Bunun StackOverflow için muhtemelen çok geniş / yapıcı olmadığına ve yine de gösterilen biraz daha fazla araştırmayla işe yarayabileceğine inanıyorum .
Aurora0001

1
@ Aurora0001 aradığımda hile sayfasını gördüm ama sorumun cevabı bu değil! Komutlar arasındaki farkları değil, ikisi arasındaki farkları bilmek istiyorum. Lütfen önce sorumu okuyun
Asha

4
@Asha Daha fazla ayrıntıya sahip olmak için sorunuzu düzenlemeli ve daha önce araştırdıklarınızı göstermelisiniz. Ne tür farklılıklar bulmak istiyorsunuz? Kitaplıkların nasıl uygulandığını bulmaya mı çalışıyorsunuz? Soruna yaklaşımda nasıl farklı olduklarını anlamaya mı çalışıyorsunuz? Sorunuzu daha net hale getirirseniz, ne sorduğunuza bağlı olarak iyi olabilir. (Ne sorduğunuza bağlı olarak, bilgiler Google'da zaten mevcut olabilir.)
jedd.ahyoung

3
komik insanlar size google'ı söyler; Sorunuzun google'a gittiğini buldum ... Stackoverflow'daki insanlar şeyleri aşırı derecede dışlıyorlar, sanki onları daha önemli hale getirecekmiş gibi.
jairhumberto

Yanıtlar:


72

GÜNCELLEME: Mart 2018 (biraz geç ...)

5. versiyondan beri, npm

  • package-lock.jsonTüm bağımlılık ağacınızı, iplik (veya başka herhangi bir) kilitleme mekanizmasının yaptığı gibi düzelten bir 'kilit dosyası' oluşturur,
  • Bir araç yapıldı
  • --save şimdi ima ediliyor npm i
  • Daha iyi ağ ve önbellek kullanımı

npm 5.7.0 ayrıca tanıtılannpm ci bulunan tek yükleyerek paketleri tarafından sürekli entegrasyon ortamında daha hızlı bağımlılıkları yüklemek için komutu package-lock.json(eğer bir hata rapor package-lock.jsonve package.jsonsenkronize edilmez).

Şahsen ben hala kullanıyorum npm.


Orijinal

Doğrudan belgelerden alıntı yapmaktan nefret ediyorum, ancak nedenini açıklamakta harika bir iş çıkarıyorlar, kısaca fikirleri nasıl daha fazla özetleyeceğimi göremiyorum.

Büyük oranda:

  1. Her geliştirme makinesinde aynı şeyi elde ettiğinizi her zaman bilirsiniz

  2. Yapmayan operasyonları paralellize eder npmve

  3. Ağın daha verimli kullanılmasını sağlar.

  4. Diğer sistem kaynaklarının (RAM gibi) daha verimli kullanılmasını da sağlayabilir .

İnsanların onunla ilgili üretim deneyimleri nelerdir? Kim bilir, genel halk için bir bebek.

TL; Yehuda Katz'dan DR :

Başlangıçtan itibaren İplik kilit dosyası, aynı havuzda tekrar tekrar çalıştırılan ipliğin aynı bobinlerle sonuçlanmasını garanti eder.

İkincisi, Yarn soğuk bir önbellekle, ancak özellikle sıcak bir önbellekle iyi bir performans elde etmeye çalışır.

Son olarak, Yarn güvenliği temel bir değer haline getirir.

Güzel blog yazısı

Gant Laborde'den " NPM vs İplik Hile Sayfası "

Projenin biraz daha uzun versiyonu :

Hızlı: İplik indirdiği her paketi önbelleğe alır, böylece bir daha asla ihtiyaç duymaz. Ayrıca, kaynak kullanımını en üst düzeye çıkarmak için işlemleri paralel hale getirir, böylece yükleme süreleri her zamankinden daha hızlıdır.

Güvenilir: Ayrıntılı, ancak özlü bir kilit dosyası biçimi ve yüklemeler için belirleyici bir algoritma kullanan Yarn, bir sistemde çalışan bir yüklemenin diğer herhangi bir sistemde tamamen aynı şekilde çalışacağını garanti edebilir.

Güvenli: Yarn, kodu çalıştırılmadan önce kurulan her paketin bütünlüğünü doğrulamak için sağlama toplamlarını kullanır.

Ve README.md'den :

  • Çevrimdışı Mod: Daha önce bir paket kurduysanız, herhangi bir internet bağlantısı olmadan tekrar kurabilirsiniz.
  • Belirleyici: Aynı bağımlılıklar, kurulum sırasına bakılmaksızın her makineye tam olarak aynı şekilde yüklenecektir.
  • Ağ Performansı: Yarn, ağ kullanımını en üst düzeye çıkarmak için istekleri verimli bir şekilde sıraya koyar ve şelale taleplerini önler.
  • Birden Fazla Kayıt: Herhangi bir paketi npm veya Bower'dan yükleyin ve paket iş akışınızı aynı tutun.
  • Ağ Dayanıklılığı: Tek bir isteğin başarısız olması, yüklemenin başarısız olmasına neden olmaz. Başarısızlık durumunda istekler yeniden denenir.
  • Düz Mod: Yinelemelerden kaçınmak için uyumsuz bağımlılık sürümlerini tek bir sürüme çözün.
  • Daha fazla emoji. 🐈

İpliğin npm v3 gibi bağımlılık çözümlemesi yapıp yapmadığını bana söyleyebilir misiniz ? Her bağımlılığın yalnızca bir sürümünün kurulmasına izin verilen gerçek bir düz yapıyı --flatzorlayan bir seçenek olduğunu anlıyorum , ancak bunun için varsayılan davranış nedir? Teşekkürler.
Dimitris Karagiannis

2
Daha fazla emoji: kedi:
Huei Tan

8
Mükemmel cevap. Çatallamadan, yeniden adlandırmadan ve sözdizimini değiştirmeden önce npm'ye katkıda bulunmayı denediler mi merak ediyorum install -g.
Gardner Bickford


3

PNPM nedir?

pnpmbir modülün bir sürümünü yalnızca bir kez diske kaydetmek için sabit bağlantıları ve sembolik bağlantıları kullanır. Örneğin npm veya Yarn kullanırken, aynı lodash sürümünü kullanan 100 projeniz varsa, diskte 100 kopya lodash olacaktır. Pnpm ile, lodash diskte tek bir yere kaydedilecek ve bir sabit bağlantı onu kurulması gereken node_modüllerine koyacaktır.

Sonuç olarak, diskinizde gigabaytlık alan tasarrufu sağlarsınız ve çok daha hızlı kurulumlara sahip olursunuz! Pnpm'nin oluşturduğu benzersiz node_modules yapısı ve neden Node.js ekosistemiyle iyi çalıştığı hakkında daha fazla ayrıntı istiyorsanız, şu küçük makaleyi okuyun: Neden pnpm kullanmalıyız?

PNPM nasıl kurulur?

npm install -g pnpm

PNPM kullanarak npm paketi nasıl kurulur?

pnpm install -g typescript // or your desired package

Faydaları PNPMover YarnveNPM

İşte kurulum süresi tarafından alınan gösteren ilerleme-bar olduğu NPM, YARNve PNPM(daha kısa bar iyidir) görüntü açıklamasını buraya girin

Tam Kontrol Karşılaştırması için tıklayın

daha fazla ayrıntı için https://www.npmjs.com/package/pnpm adresini ziyaret edin


2

npm :

  1. JavaScript için paket yöneticisi. npm, npm ekosisteminin komut satırı arayüzüdür. Savaşta test edilmiştir, şaşırtıcı derecede esnektir ve her gün yüz binlerce JavaScript geliştiricisi tarafından kullanılmaktadır.
  2. NPM, doğru bir kilit dosyası oluştururken, bir İplik kilit dosyası bazı durumlarda bozuk olabilir ve iplik aletleriyle düzeltilmesi gerekir.

İplik :

  1. JavaScript için yeni bir paket yöneticisi. İplik, indirdiği her paketi önbelleğe alır, böylece bir daha asla ihtiyaç duymaz. Ayrıca, kaynak kullanımını en üst düzeye çıkarmak için işlemleri paralel hale getirir, böylece yükleme süreleri her zamankinden daha hızlıdır.
  2. Yarn şifre ile girişi desteklemiyor (NPM bunu yaparken)

1
ne tür girişler?
Rich Stone

1

Yarn kullanarak bir paket kurduğunuzda (iplik paket adı kullanarak), paketi diskinize yerleştirir . Bir sonraki kurulumda, tarball'ı kayıt defterinden almak için HTTP isteği göndermek yerine bu paket kullanılacaktır.

Yarn , bağımlı olduğunuz tüm modüllerin lisanslarını kontrol etmeniz gerektiğinde gerçekten güçlü olabilecek kullanışlı bir lisans denetleyiciyle birlikte gelir .

Özel mülk yazılım üzerinde çalışıyorsanız, hangisini kullandığınız önemli değildir. Npm ile, npm-shrinkwrap.js'yi, Yarn ile de thread.lock'u kullanabilirsiniz.

Daha fazla bilgi için lütfen aşağıdaki blogu okuyun

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

Yeni başlayanlar için daha iyi bir genel bakış sunmaya çalışıyorum.

npm tarihsel olarak (2010) JavaScript için en popüler paket yöneticisi olmuştur. Projenizin bağımlılıklarını yönetmek için kullanmak istiyorsanız, aşağıdaki komutu yazabilirsiniz:

npm init

Bu bir package.jsondosya oluşturacaktır . Projenin tüm bağımlılıklarını içerir.

Sonra

npm install

bir dizin oluşturur node_modulesve içindeki bağımlılıkları ( package.jsondosyaya eklediğiniz ) indirir .

Ayrıca bir package-lock.jsondosya oluşturacaktır . Bu dosya, oluşturulan bağımlılıklar ağacını tanımlamak için kullanılır. Geliştiricilerin aynı bağımlılıkları kurmasına izin verir. Örneğin, bir geliştiricinin bir bağımlılığı v2'ye ve ardından v3'e yükseltirken bir başkasının doğrudan v3'e yükselttiğini hayal edebilirsiniz.

npm, bağımlılıkları belirleyici olmayan bir şekilde yükler; bu, iki geliştiricinin farklı davranışlaranode_modules neden olan farklı bir dizine sahip olabileceği anlamına gelir . ** npm, Şubat 2018'de olduğu gibi kötü bir şöhrete sahipti: 5.7.0 sürümünde, Linux sistemlerinde sudo npm çalıştırmanın, sistem dosyalarının sahipliğini değiştirerek işletim sistemini kalıcı olarak bozacağı bir sorun keşfedildi.

Bu sorunları ve diğerlerini gidermek için, Facebook yeni bir paket yöneticisini tanıtıldı : (2016) İplik bir hızlı, daha güvenli ve daha güvenilir JavaScript için yöneticisini paket.

Aşağıdakini yazarak bir projeye İplik ekleyebilirsiniz :

yarn init

Bu bir package.jsondosya oluşturacaktır . Ardından, bağımlılıkları şu şekilde yükleyin:

yarn install

Bir klasör node_modulesoluşturulacak. İplik ayrıca adında bir dosya oluşturacaktır yarn.lock. Bu dosya ile aynı amaca hizmet eder, package-lock.jsonancak bunun yerine deterministik ve güvenilir bir algoritma kullanılarak oluşturulur, böylece tutarlı yapılara yol açar.

Birlikte bir proje başladıysanız NPM , aslında göç edebilir İplik kolayca. iplik aynı tüketir package.json. Daha fazla ayrıntı için bkz . Npm'den geçiş .

Ancak, npm her yeni sürümler ile geliştirildi ve bazı projeler halen kullandığı UÖM'sini üzerinde iplik .


1

@ Msanford'un cevabı neredeyse her şeyi kapsıyor, ancak güvenlik (OWASP'nin Bilinen Güvenlik Açıkları) bölümünü kaçırıyorum.

İplik

Bunları kullanarak kontrol edebilirsiniz yarn audit, ancak düzeltemezsiniz. Bu hala GitHub'da ( https://github.com/yarnpkg/yarn/issues/7075 ) açık bir sorundur .

npm

Kullanabilirsiniz npm audit fix, böylece bazılarını kendiniz düzeltebilirsiniz.

Her ikisi de, yani npm audit& yarn auditkendi Sürekli Entegrasyon araçlar bulunmaktadır. Bunlar sırasıyla https://github.com/IBM/audit-ci (kullanılmış, harika çalışıyor!) Ve https://yarnpkg.com/package/audit-ci (kullanılmamış).

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.