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.
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.
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;)
... 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
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.
npm install yourlibrary
, misalnya.travis.yml
dan.jshintrc
.npmignore
atau"files"
( docs.npmjs.com/files/package.json#files ).Jawaban:
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
.gitignore
diabaikannpm
secara default jika.npmignore
tidak 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
.coffee
file dalam paket Anda tetapi tetap melacaknya di repositori git Anda.Bangun sisa file
node-gyp
mungkin memiliki file objek yang dihasilkan selama build yang tidak perlu dimasukkan ke dalam paket..gitignore
. Anda harus menempatkan hal-hal ini di dalam sini jika Anda sudah menggunakan.npmignore
file karena menimpa.gitignore
dari sudut pandang npm.Tes
Pengaturan integrasi berkelanjutan / file Meta
.travis.yml
tidak diperlukan untuk menggunakan, menguji, atau melihat kode.Dokumen non-readme dan contoh kode
Objek halaman github
CNAME
file atau placeholderindex.html
jika Anda menggunakan modul Anda berfungsi ganda sebagaigh-pages
repositori juga.bower.json dan teman-teman
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.
sumber
Saya setuju dengan jawaban singkat dan sintetik lante dan jawaban besar SamT :
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;)
sumber
npm test
di semua node_modules dapat memberi Anda petunjuk jika ada sesuatu yang berfungsi berbeda di lingkungan tertentu..npmignore
.files: ["lib", "!lib/**/*.test.js"]
. :)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.yml
atau.jshintrc
file Anda , atau bahkan beberapa gambar, file Grunt, dokumentasi, dll..npmignore
dapat membuat paket npm Anda memiliki lebih sedikit file, dan lebih cepat diunduhsumber
.npmignore
tidak 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.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?
sumber