Biarkan npm memilih registri berdasarkan cakupan paket, bukan VPN
Entri cakupan mengirim paket perusahaan ke registri privat dan membiarkan sisanya publik. Perutean, kredensial, dan prioritas adalah tiga keputusan lagi.
Menghubungkan VPN seharusnya tidak berarti menyunting pengaturan registri npm dua kali sehari. Entri cakupan dalam berkas konfigurasi tingkat proyek dapat mengirim paket perusahaan ke satu registri dan sisanya ke registri publik, tanpa peralihan dan tanpa penggantian yang tertinggal pada Jumat sore. Masalahnya, ini hanya menyelesaikan penamaan; perutean, kredensial, dan prioritas konfigurasi adalah tiga hal terpisah yang masing-masing gagal dengan caranya sendiri.
Dua nama, dua tujuan
Nama paket npm memiliki cakupan atau tidak. Nama bercakupan dimulai dengan tanda @ dan pengenal cakupan, dan pengenal itulah yang dapat dipetakan oleh konfigurasi. Tidak ada hal lain pada paket yang penting untuk pemetaan. Registri tidak pernah melihat permintaan berdasarkan apakah paket itu internal atau publik; ia hanya melihat nama.
Jadi berkas di bawah menyatakan dua niat dalam tiga baris: paket publik menuju registri publik, dan paket di bawah cakupan perusahaan menuju registri perusahaan dengan token untuk host itu.
registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}Ganti cakupan, host, dan nama variabel dengan apa yang sebenarnya disediakan organisasi. Strukturnya yang penting, bukan nilai contohnya. Dua baris konfigurasi membawa seluruh kebijakan, karena itu keduanya layak dipahami alih-alih disalin.
Jaga pemetaan dan jaringan di kompartemen terpisah dalam kepala Anda. Entri cakupan tidak dapat membuat host yang tak terjangkau menjadi terjangkau, dan terowongan yang berfungsi tidak dapat memberi tahu npm registri mana yang menjadi milik suatu paket.
Tulis berkas dalam urutan yang benar
Tempatkan berkas proyek di urutan pertama dalam penalaran Anda meskipun npm membaca beberapa berkas. .npmrc di direktori proyek adalah yang diwarisi rekan kerja Anda melalui repositori, jadi berkas itu harus menyatakan kebijakan bersama, bukan token pribadi Anda. Berkas itu juga yang akan dibaca peninjau. Jaga agar cukup kecil untuk ditinjau sekali lihat.
Biarkan baris registry bawaan tetap menunjuk ke registri publik kecuali organisasi memutuskan sebaliknya. Menghapusnya membuat mesin bergantung pada apa yang dikatakan berkas tingkat pengguna, dan itulah jenis dependensi implisit yang menghasilkan hasil berbeda pada dua laptop.
Baris cakupan bukan kartu liar. Nama di luar cakupan tetap memakai nilai bawaan, dan itulah perilaku yang Anda inginkan untuk setiap dependensi yang tidak Anda tulis sendiri.
Periksa ke apa berkas itu diselesaikan sebelum Anda mengomitnya, dengan memakai nama paket sekali pakai alih-alih pemasangan sungguhan, agar kesalahan tidak memakan biaya.
Kredensial milik host, bukan proyek
Entri autentikasi dikunci ke host registri dan, bila registri membutuhkannya, ke sebuah jalur. Itu sebabnya baris token dimulai dengan garis miring ganda dan host, bukan cakupan. Begitu Anda melihat host di posisi itu, sisa baris berhenti tampak seperti tanda baca sembarang. Itu adalah alamat, dan token terpasang padanya.
Memakai variabel lingkungan menjaga token literal tetap di luar berkas di repositori. Itu tidak membuat token tak terlihat di mana-mana; token tetap muncul di lingkungan proses, dan perintah yang mencetak konfigurasi dapat mengungkapkannya.
Sediakan variabel melalui mekanisme kredensial lokal atau CI yang disetujui organisasi, dan jangan pernah menempelkan token sungguhan ke contoh yang mungkin disalin ke dokumentasi.
Jika ada dua registri yang terlibat, masing-masing mendapat entrinya sendiri. Satu pengaturan token tanpa kualifikasi paling baik bersifat ambigu dan paling buruk terkirim ke host yang salah.
Ketika registri yang salah menang
Konfigurasi berlapis, dan nilai yang berlaku belum tentu nilai dalam berkas yang baru saja Anda sunting. Pengaturan proyek, pengaturan pengguna, pengaturan global, dan variabel lingkungan semuanya berperan. Pelapisan itulah sebabnya perbaikan berhasil di mesin Anda tetapi tidak di kontainer rekan kerja. Itu juga sebabnya nilai efektif layak dicetak sebelum Anda memperdebatkannya.
Variabel lingkungan adalah tersangka biasa di CI, tempat sebuah pekerjaan menetapkan registri sekali dan setiap langkah berikutnya mewarisinya. Yang paling umum kedua adalah berkas tingkat pengguna di mesin pengembang yang menimpa apa yang dikatakan repositori.
Cetak konfigurasi efektif dan registri yang diselesaikan untuk satu nama bercakupan dan satu nama tanpa cakupan sebelum men-debug hal lain. Jika kedua jawaban itu sesuai dugaan Anda, masalahnya ada di jaringan; jika tidak, masalahnya ada di konfigurasi dan tidak ada pekerjaan VPN yang akan membantu.
Daftar periksa sebelum mengomit
Pastikan nama cakupan cocok dengan paket yang benar-benar diterbitkan, registri bawaan bersifat eksplisit, dan baris token menyebut host yang benar. Salah ketik pada cakupan menghasilkan kegagalan paling aneh, karena paket diselesaikan dari registri publik dan mengembalikan modul orang lain dengan nama yang sama. Periksa namanya sebelum men-debug token.
Pastikan registri privat dapat dijangkau dari mesin dalam konteks yang menjalankan pemasangan, bukan hanya dari peramban Anda. Perbedaan itu penting ketika proksi atau kontainer memiliki perutean yang berbeda dari shell Anda.
Lalu pastikan perilakunya pada checkout bersih tanpa paket yang di-cache. Pemasangan baru adalah satu-satunya uji yang menunjukkan apa yang akan dialami rekan kerja baru.