Testlerimi .npm dikkate almalı mıyım?


94

Tam olarak ne koymalıyım .npmignore?

Testler mi? Stuff gibi .travis.yml, .jshintrc? Modülü çalıştırırken gerekli olmayan herhangi bir şey (benioku dışında)?

Bu konuda herhangi bir yol gösterici bulamıyorum.


4
npm install yourlibraryörneğin birisi aradığında ihtiyaç duyulmayan her şeyi görmezden .travis.yml.jshintrc
gelmeli

Gerçekten mi? hatta benioku mu? bu resmi olarak herhangi bir yerde tavsiye ediliyor mu?
callum

3
README, ne olursa olsun .npmignoreveya "files"( docs.npmjs.com/files/package.json#files ) otomatik olarak eklenir .
Nicolás Fantone

Yanıtlar:


86

Muhtemelen bulduğunuz gibi, NPM gerçekten oraya ne girmesi gerektiğini gerçekten belirtmiyor, bunun yerine varsayılan olarak göz ardı edilen dosyaların bir listesine sahipler . Çoğu insan bunu kullanmaz, çünkü sizdeki her şey mevcut değilse varsayılan .gitignoreolarak göz ardı edilir . Ek olarak, birçok dosya, ayarlardan bağımsız olarak varsayılan olarak zaten yok sayılır ve yukarıdaki bağlantıda belirtildiği gibi bazı dosyalar her zaman göz ardı edilmez.npm.npmignore

Neyin her zaman orada olması gerektiğine dair çok fazla resmi yok çünkü bu temelde bir alt kümesidir .gitignore, ancak 5-ish yıl boyunca düğümü kullanarak topladığım şeyden, işte ortaya çıkardığım şey.

Not: Üretim derken, modülünüzün birileri tarafından kullanıldığı ve modül üzerinde geliştirilmediği herhangi bir zamanı kastediyorum.


Ön sürüm çapraz derlenmiş kaynaklar

  • Artıları : JavaScript'te çapraz derleyen bir dil kullanıyorsanız, yayınlamadan önce ön derleme yapabilir ve .coffeedosyaları paketinize dahil etmeyebilir, ancak bunları git deponuzda izlemeye devam edebilirsiniz.

Dosya artıkları oluşturun

  • Artıları : Bu tür şeyleri kullanan kişiler node-gyp, hiçbir zaman pakete girmemesi gereken bir derleme sırasında oluşturulan nesne dosyalarına sahip olabilir.
  • Eksileri : Bu her zaman .gitignorezaten girmeli . Npm'nin bakış açısından .npmignoregeçersiz kılan bir dosya kullanıyorsanız, bunları buraya yerleştirmelisiniz .gitignore.

Testler

  • Artıları : Üretim kodunuzda daha az bagaj.
  • Eksileri : Testin başarısız olmasına neden olan, çalışan düğümün eski sürümü gibi sisteme özgü bir arıza olması ihtimaline karşın canlı ortamlarda testler çalıştıramazsınız.

Sürekli entegrasyon ayarları / Meta dosyalar

  • Artıları : Yine, daha az bagaj. .travis.ymlKodu kullanmak, test etmek veya görüntülemek için gerekli olmayan şeyler .

Benioku olmayan dokümanlar ve kod örnekleri

  • Artıları : Daha az bagaj. Benioku'nuzda en azından minimum uygulanabilir işlevselliği ifade edemiyorsanız, modülünüz çok büyük olan düşünce okulunda bazı insanlar vardır.
  • Eksileri : İnsanlar kendi dosya sistemlerinde kapsamlı belgeleri ve kod örneklerini göremezler. Depoyu ziyaret etmeleri gerekir (ki bu da bir internet bağlantısı gerektirir).

Github sayfaları nesneleri

  • Artıları : Modülünüzü kullanırsanız, sürümlerinizi CNAMEdosya veya yer tutucularla doldurmanıza kesinlikle gerek yoktur .index.htmlgh-pages

bower.json ve arkadaşları

  • Artıları : Yayınlanmadan önce bağımlılıklarınızı oluşturmaya karar verirseniz, son kullanıcının bower yüklemesine ve ardından bununla daha fazla şey yüklemesine ihtiyacınız yoktur. Ben şahsen bunları paketin içinde saklardım. Bir yaptığımda npm install, yalnızca npm'ye güvenmemeli ve başka harici kaynaklara güvenmemeliyim.

Temel olarak, npm paketinizin dışında tutmak, ancak npm deponuzun dışında tutmak istediğiniz bir şey varsa onu kullanmalısınız. Uzun bir öğe listesi değil, ancak npm, insanların paketlerinde alakasız nesnelere takılıp kalması yerine işlevselliği geliştirmeyi tercih ediyor.


Kullanılamayan komut dosyalarını package.json dosyasından kaldırmanın bir yolu yok mu? Örneğin, komut dosyalarını test etmek mi? Her şeyi kaldırmak için kendimi biraz dağınık hissediyorum ama komut dosyalarını dosyada
tutuyorum

Hayır yok. Bunları package.json'dan çıkarabilirsiniz, çünkü bu zaten NPM içindir ve yalnızca testleri çalıştırıyorsanız, bunları çalıştırmak için orijinal komutla bunlara erişebilirsiniz.
SamT

65

Ben katılıyorum Lante en kısa ve sentetik cevap ve Samt en büyük cevap :

  • Testlerinizi paketinize dahil etmemelisiniz.
  • Paketiniz yalnızca üretim çalışma zamanı dosyalarını içermelidir.
  • Bu, paketinizin daha basit ve indirilmesi için daha hızlı olmasını sağlar.

Bu cevaplara katkım:

.npmignore , paket dosyası seçimini gerçekleştirmenin kara liste yoludur. Ancak daha pratik bir şekilde, paketinize eklemeniz gereken dosyaları , package.json dosyanızdaki dosyalar alanını kullanarak beyaz listeye ekleyebilirsiniz :

{
  "files": [
    "lib/",
    "index.js"
  ]
}

Bence bu daha basit, geleceğe yönelik kanıt ve daha iyi anlambilim;)


3
... hatırlaması daha kolay ve kazaya daha az eğilimli hiçbir şey söylememek Bahşiş için teşekkürler, bu harika.
Connor

2
Bu yaklaşımı beğendim.
Brady Holt

2
Sanırım "index.js" yi, paket.json'unuzdaki 'ana' dosya olduğunu varsayarak bile atlayabilirsiniz :)
Ben George

Resimleri ve gereksiz belgeleri görmezden gelmek sorun değil. Ancak testleri görmezden gelmek muhtemelen iyi bir fikir değildir. Bazı ekstra KB'leri indirmek o kadar zaman almaz ve npm testtüm node_modules'de özyinelemeli yapmak , belirli bir ortamda bir şey farklı çalışıyorsa size bir ipucu verebilir.
adelriosantiago

5
@ NicolásFantone files özelliği glob şablonunu da kabul eder . Böylece test dosyalarını oluşturmadan yok sayabiliriz .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj

15

Açıklığa kavuşturmak için, ne zaman birisi yapsanpm install your-library , npm , deponuza eklediğiniz dosyalar dışında deponun içerdiği tüm kaynak dosyaları indirecektir .npmignore.

Kitaplığınızı kuran kişilerin yalnızca kitaplığınızın çalışmasına ihtiyacı olacağını bilin, başka hiçbir şey gerekli olmayacaktır.

Örneğin, bir kişi bir kitaplık yüklediğinde, muhtemelen sizin .travis.ymlveya .jshintrcdosyalarınızın, hatta bazı görsellerin, Grunt dosyalarının, belgelerin vb. Umrunda değildir.

.npmignore npm paketinizin daha az dosyaya sahip olmasına ve daha hızlı indirilmesine izin verebilir


2
Buradaki duyarlılık iyidir, ancak açıklığa kavuşturmak için: indirilenleri.npmignore doğrudan etkilemez , npm yayınlayıp yüklediğinizde paketinize nelerin gireceğini etkiler . Bu, dolaylı olarak indirilecek daha küçük dosyalar oluşturur.
Mark Stosberg

3

Testlerinizi dahil etmeyin. Çoğu zaman testler, gerçek kod tabanının boyutunun 5 katıdır. Testleriniz Github vb. Üzerinde olduğu sürece, bu yeterince iyidir.

Ancak kesinlikle yapmanız gereken, NPM paketinizi yayınlanmış formatında test etmektir . Gerçek kod tabanında bulunan, ancak test paketinin parçası olmayan bazı duman testleri oluşturun.

Paketinizi tarball'ladıktan sonra test etme hakkında bilgi edinebilirsiniz: https://github.com/ORESoftware/r2g

NPM'de gerçekten yayınlamadan bir "npm yayınlama" sonucu nasıl test edilir?

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.