Haruskah saya mengabaikan tes saya?

93

Apa tepatnya yang harus saya masukkan .npmignore?

Tes? Stuff suka .travis.yml, .jshintrc? Apa saja yang tidak diperlukan saat menjalankan modul (kecuali readme)?

Saya tidak dapat menemukan panduan tentang ini.

callum
sumber
4
harus mengabaikan semua yang tidak diperlukan saat seseorang menelepon npm install yourlibrary, misalnya .travis.ymldan.jshintrc
lante
Betulkah? bahkan seorang readme? apakah ini direkomendasikan secara resmi di mana saja?
callum
3
README otomatis disertakan terlepas dari .npmignoreatau "files"( docs.npmjs.com/files/package.json#files ).
Nicolás Fantone

Jawaban:

86

Seperti yang mungkin Anda temukan, NPM tidak benar-benar menyatakan secara spesifik apa yang harus dimasukkan ke sana, melainkan mereka memiliki daftar file yang diabaikan-oleh-default . Banyak orang bahkan tidak menggunakannya karena semua yang ada di Anda .gitignorediabaikan npmsecara default jika .npmignoretidak ada. Selain itu, banyak file telah diabaikan secara default terlepas dari pengaturannya dan beberapa file selalu dikecualikan agar tidak diabaikan, seperti yang dijelaskan pada tautan di atas.

Tidak banyak yang resmi tentang apa yang harus selalu ada karena pada dasarnya ini adalah bagian dari .gitignore, tetapi dari apa yang saya kumpulkan dari menggunakan node selama 5 tahun, inilah yang saya dapatkan.

Catatan: Yang saya maksud dengan produksi adalah kapan saja modul Anda digunakan oleh seseorang dan tidak untuk dikembangkan pada modul itu sendiri.


Sumber yang dikompilasi silang pra-rilis

  • Kelebihan : Jika Anda menggunakan bahasa yang mengkompilasi silang ke dalam JavaScript, Anda dapat melakukan pra-kompilasi sebelum rilis dan tidak menyertakan .coffeefile dalam paket Anda tetapi tetap melacaknya di repositori git Anda.

Bangun sisa file

  • Kelebihan : Orang-orang yang menggunakan hal-hal seperti node-gypmungkin memiliki file objek yang dihasilkan selama build yang tidak perlu dimasukkan ke dalam paket.
  • Cons : Ini harus selalu masuk ke dalam .gitignore. Anda harus menempatkan hal-hal ini di dalam sini jika Anda sudah menggunakan .npmignorefile karena menimpa .gitignoredari sudut pandang npm.

Tes

  • Kelebihan : Lebih sedikit bagasi dalam kode produksi Anda.
  • Kekurangan : Anda tidak dapat menjalankan pengujian di lingkungan langsung jika ada kemungkinan kecil kegagalan sistem tertentu, seperti versi node yang sudah lama berjalan yang menyebabkan pengujian gagal.

Pengaturan integrasi berkelanjutan / file Meta

  • Kelebihan : Sekali lagi, lebih sedikit bagasi. Hal-hal seperti .travis.ymltidak diperlukan untuk menggunakan, menguji, atau melihat kode.

Dokumen non-readme dan contoh kode

  • Kelebihan : Lebih sedikit bagasi. Beberapa orang ada di mazhab pemikiran di mana jika Anda tidak dapat mengekspresikan setidaknya fungsionalitas minimum yang layak di Readme Anda, modul Anda terlalu besar.
  • Kekurangan : Orang tidak dapat melihat dokumentasi lengkap dan contoh kode di sistem file mereka sendiri. Mereka harus mengunjungi repositori (yang juga membutuhkan koneksi internet).

Objek halaman github

  • Kelebihan : Anda tentu tidak perlu mengotori rilis Anda dengan CNAMEfile atau placeholder index.htmljika Anda menggunakan modul Anda berfungsi ganda sebagai gh-pagesrepositori juga.

bower.json dan teman-teman

  • Kelebihan : Jika Anda memutuskan untuk membangun dependensi Anda sebelum rilis, Anda tidak memerlukan pengguna akhir untuk menginstal bower kemudian menginstal lebih banyak hal dengannya. Saya secara pribadi akan menyimpan barang-barang itu di dalam paket. Ketika saya melakukan npm install, saya seharusnya hanya mengandalkan npm dan tidak ada sumber eksternal lainnya.

Pada dasarnya, Anda harus pernah menggunakannya jika ada sesuatu yang ingin Anda simpan dari paket npm Anda tetapi tidak keluar dari repositori npm Anda. Ini bukan daftar item yang panjang, tetapi npm lebih suka membangun fungsionalitas daripada membuat orang terjebak dengan objek yang tidak relevan dalam paket mereka.

SamT
sumber
Apakah tidak ada cara untuk menghapus skrip yang tidak dapat digunakan dari file package.json. Misalnya menguji skrip? Saya merasa agak berantakan untuk menghapus semuanya tetapi tetap menyimpan skrip di file ...
inf3rno
Tidak, tidak ada. Anda dapat menghilangkannya dari package.json karena itu terutama untuk NPM dan jika Anda hanya menjalankan pengujian, Anda dapat mengaksesnya melalui perintah asli untuk menjalankannya.
SamT
65

Saya setuju dengan jawaban singkat dan sintetik lante dan jawaban besar SamT :

  • Anda tidak boleh menyertakan pengujian Anda dalam paket Anda.
  • Paket Anda seharusnya hanya berisi file runtime produksi.
  • Itu akan membuat paket Anda lebih mudah dan lebih cepat untuk diunduh.

Kontribusi saya untuk jawaban tersebut:

.npmignore adalah cara daftar hitam untuk mencapai pemilihan file paket. Tetapi dengan cara yang lebih praktis, Anda dapat memasukkan file ke dalam daftar putih yang perlu Anda sertakan dalam paket Anda menggunakan kolom files di package.json Anda:

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

Saya pikir itu lebih sederhana, bukti masa depan dan memiliki semantik yang lebih baik;)

Yves M.
sumber
3
... untuk tidak mengatakan apa pun yang lebih mudah diingat dan tidak terlalu rawan kecelakaan untuk digunakan (jika Anda pelupa seperti saya). Terima kasih atas tipnya, ini bagus.
Connor
2
Saya suka pendekatan ini.
Brady Holt
2
Saya pikir Anda bahkan dapat menghilangkan "index.js" dengan asumsi itu adalah file 'utama' di package.json Anda :)
Ben George
Mengabaikan gambar dan dokumen yang tidak perlu tidak masalah. Tapi mengabaikan tes mungkin bukan ide yang bagus. Mengunduh beberapa KB tambahan tidak membutuhkan banyak waktu dan melakukan rekursif npm testdi semua node_modules dapat memberi Anda petunjuk jika ada sesuatu yang berfungsi berbeda di lingkungan tertentu.
adelriosantiago
5
@ NicolásFantone Properti files menerima pola glob juga. Jadi kita bisa mengabaikan file uji tanpa membuat .npmignore. files: ["lib", "!lib/**/*.test.js"]. :)
Sureshraj
15

Hanya untuk memperjelas, kapan pun seseorang melakukannya npm install your-library, npm akan mengunduh semua file sumber yang disertakan dalam repo, kecuali file yang Anda sertakan di .npmignore.

Ketahuilah bahwa orang yang menginstal perpustakaan Anda hanya membutuhkan perpustakaan Anda yang berjalan, hal lain tidak diperlukan.

Misalnya, ketika seseorang menginstal perpustakaan, mungkin dia tidak peduli dengan Anda .travis.ymlatau .jshintrcfile Anda , atau bahkan beberapa gambar, file Grunt, dokumentasi, dll.

.npmignore dapat membuat paket npm Anda memiliki lebih sedikit file, dan lebih cepat diunduh

lante
sumber
2
Sentimen di sini bagus, tetapi untuk memperjelas: .npmignoretidak secara langsung memengaruhi apa yang diunduh , itu memengaruhi apa yang masuk ke paket Anda ketika Anda menerbitkan dan mengunggah. Ini secara tidak langsung membuat file yang lebih kecil untuk diunduh.
Mark Stosberg
3

Jangan sertakan tes Anda. Seringkali tes seperti 5x ukuran basis kode sebenarnya. Selama pengujian Anda ada di Github, dll, itu cukup bagus.

Tetapi yang mutlak harus Anda lakukan adalah menguji paket NPM Anda dalam format yang dipublikasikan . Buat beberapa pengujian asap yang berada dalam basis kode yang sebenarnya, tetapi bukan bagian dari rangkaian pengujian.

Anda dapat membaca tentang menguji paket Anda setelah melakukan tarball, di sini: https://github.com/ORESoftware/r2g

Bagaimana cara menguji hasil `npm publish`, tanpa benar-benar mempublikasikan ke NPM?

Alexander Mills
sumber