Rumah >hujung hadapan web >tutorial js >Menyegerakkan Pakej NPM Antara Berbilang Pendaftaran
Foto oleh Nicolas Radzimski di Unsplash
Pasukan kami bergantung pada pendaftaran NPM GitLab dalaman untuk mengurus pakej. Ini berfungsi dengan sempurna untuk pengedaran dalaman, tetapi terdapat keadaan di mana pakej perlu dikongsi dengan kolaborator luar. Menyegerakkan pakej daripada pendaftaran dalaman kepada pendaftaran luaran menjadi cabaran baharu.
Saya berusaha untuk mencari penyelesaian dan, seperti biasa, menghadapi beberapa siri halangan yang mengubahnya menjadi satu lagi bab dalam perjuangan pembangun saya.
Pada mulanya, saya fikir saya boleh menangani ini dengan permintaan HTTP mentah, pada asasnya meniru perkara yang dilakukan oleh NPM CLI di bawah hud. Ideanya mudah: tanya daftar sumber untuk metadata pakej, ambil tarball dan muat naik ke pendaftaran sasaran.
• Prosesnya terlalu kompleks dan rapuh.
• Ia memerlukan membina keseluruhan manifes package.json secara manual untuk setiap versi.
• Setiap kesilapan kecil membawa kepada bungkusan rosak.
Seterusnya, saya menemui npm-registry-sync, perpustakaan yang direka untuk menyegerakkan pendaftaran NPM. Alat ini hampir menyelesaikan masalah; ia boleh memantau perubahan dan menirunya merentas pendaftaran.
• Ia beroperasi dalam "mod daemon", mengundi untuk kemas kini secara berterusan.
• Dalam saluran paip CI GitLab, saya memerlukan pelaksanaan sekali sahaja, dikawal sepenuhnya oleh saluran paip — tiada proses latar belakang dibenarkan.
Akhirnya, saya menyedari bahawa saya boleh berpegang pada CLI NPM yang telah dicuba dan benar. Langkah-langkahnya adalah mudah:
Walaupun ini berfungsi seperti daya tarikan, terdapat beberapa langkah tambahan yang diperlukan untuk menjadikannya mesra CI.
Menguruskan konfigurasi pendaftaran secara dinamik dalam saluran paip CI agak rumit.
Begini cara saya menyelesaikannya:
Menggunakan npm CLI, anda boleh menetapkan parameter untuk setiap pendaftaran:
npm config set "//my.awesome.registry.com:<parameter name>=<parameter value>"
Gotcha Penting:
URL dalam konfigurasi mesti mengecualikan protokol (https:).
Untuk mengaitkan ruang nama atau pakej tertentu dengan pendaftaran:
npm config set "<your namespace>:registry" "<your registry url with https:>"
Sesetengah pendaftaran memerlukan kombo nama pengguna/kata laluan, manakala yang lain menggunakan token. Inilah yang saya pelajari:
Token adalah mudah, tetapi pastikan anda menanggalkan protokol semasa mengkonfigurasi URL pengesahan:
npm config set "//my.awesome.registry.com:<parameter name>=<parameter value>"
Menjana cincangan pengesahan asas (nama pengguna:kata laluan) memerlukan perhatian terhadap perincian. Dalam sesetengah distro, arahan base64 mempunyai ciri yang berbeza daripada yang lain.
Pada macOS:
npm config set "<your namespace>:registry" "<your registry url with https:>"
Akan memberikan anda (seperti yang dijangkakan):
npm config set "//my.registry.com:_authToken=<token>"
Dengan linuxkit docker:
echo -n "<my username & password hash>" | base64
Apa yang berlaku di sini? Ada line break!
Pada sesetengah distro, parameter bungkus mempunyai set lalai kepada 76 aksara untuk memformat kunci peribadi dsb.
Ia berfungsi seperti ini:
d2hhdCBhcmUgeW91IGRvaW5nIGhlcmU/IGdvdCB5YSEgc29tZSBtb3JlIHRleHQgdG8gbWFrZSB0aGlzIHJlYWxseSByZWFsbHkgbG9uZw==
Gema -n sangat penting. Jika diabaikan, gema akan menambah pemisah baris pada penghujung rentetan dan ini akan memanipulasi cincang anda.
Menggabungkan semuanya, skrip mungkin kelihatan seperti ini:
d2hhdCBhcmUgeW91IGRvaW5nIGhlcmU/IGdvdCB5YSEgc29tZSBtb3JlIHRleHQgdG8gbWFrZSB0 aGlzIHJlYWxseSByZWFsbHkgbG9uZw==
Jadi anda boleh menggunakannya seperti ini:
echo -n "<my username & password hash>" | base64 --wrap 0
Berpegang pada Alat Mudah:
npm CLI mungkin tidak sesuai untuk tugasan ini, tetapi ia boleh dipercayai dan menyelesaikan tugas.
Perhatikan Butiran:
Mengkonfigurasikan pengesahan, terutamanya dengan base64, boleh mempunyai ciri khusus platform yang halus.
Pastikan Ia Mesra CI:
Elakkan penyelesaian seperti daemon atau tugas latar belakang apabila bekerja dalam saluran paip CI/CD. Pastikan proses di bawah kawalan saluran paip.
Menyegerakkan pakej npm antara pendaftaran merupakan pengalaman pembelajaran yang mengecewakan tetapi memberi ganjaran. Jika anda menghadapi cabaran yang sama, saya harap pelajaran ini membantu anda mengharungi perjuangan dengan lebih mudah!
Atas ialah kandungan terperinci Menyegerakkan Pakej NPM Antara Berbilang Pendaftaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!