Kami menemukan ini ketika salah satu paket internal perusahaan kami melakukan beberapa pemfaktoran ulang dan memindahkan titik masuk ke tempat lain di repositori tanpa ingat untuk memperbarui main
di package.json. Hasil akhirnya adalah npm pack
dengan senang hati dibuat dan memungkinkan sebuah paket yang tidak memiliki kesempatan untuk bekerja dengan baik untuk dipublikasikan.
Ketika npm pack
dan karena itu ketika npm publish
dijalankan
npm pack
tidak memvalidasi bahwa main
ada di tarball yang membuatnya agak mudah untuk membuat dan menerbitkan paket yang tidak dapat digunakan oleh konsumen.
npm init
dan lanjutkan membuat segala sesuatu dengan nilai default. Anda akan mendapatkan package.json
seperti ini{
"name": "npm-repro",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
npm pack
di direktori ini, dan amati bahwa tarball dibuat dengan senang hatinpm notice
npm notice 📦 [email protected]
npm notice === Tarball Contents ===
npm notice 205B package.json
npm notice === Tarball Details ===
npm notice name: npm-repro
npm notice version: 1.0.0
npm notice filename: npm-repro-1.0.0.tgz
npm notice package size: 241 B
npm notice unpacked size: 205 B
npm notice shasum: ca39bc17447e27ef2fd0dea656e0e6b473f310d7
npm notice integrity: sha512-p8tZD8W438r7t[...]7Oo0YMcAoNPzQ==
npm notice total files: 1
npm notice
npm-repro-1.0.0.tgz
Tidak ada index.js
, jadi jika paket ini pernah dicoba untuk digunakan, itu tidak akan berhasil.
npm pack
akan keluar dengan kode keluar bukan nol, yang juga akan menyebabkan npm publish
gagal dan mencegah paket yang tarbal-nya tidak berisi main
dari package.json
diterbitkan ke registri.Perusahaan kami mengalami masalah ini saat mencoba memublikasikan ke registri internal kami.
Saya tidak yakin apakah ini lebih cocok sebagai bug untuk npm-packlist
. Saya tidak sepenuhnya yakin bagaimana organisasi npm
ingin memisahkan masalah di antara keduanya. Yaitu harus npm-packlist
hanya secara membabi buta mengembalikan daftar file yang harus mencoba untuk dimasukkan tanpa melakukan validasi apa pun dan membiarkan validasi urutan yang lebih tinggi berlangsung di paket apa pun yang ingin menggunakan fungsionalitas npm-packlist
?
Ini bukan pekerjaan npm-packlist, ini pekerjaan npm publish
jika ada.
Kedengarannya masuk akal. Untuk alasan apa pun perusahaan saya menggunakan npm pack
to sebagai tes untuk melihat apakah publikasi akan berhasil diselesaikan atau tidak. npm publish --dry-run
mungkin adalah cek yang lebih baik.
Komentar yang paling membantu
Kedengarannya masuk akal. Untuk alasan apa pun perusahaan saya menggunakan
npm pack
to sebagai tes untuk melihat apakah publikasi akan berhasil diselesaikan atau tidak.npm publish --dry-run
mungkin adalah cek yang lebih baik.