Rumah >hujung hadapan web >tutorial js >Menyegerakkan Pakej NPM Antara Berbilang Pendaftaran

Menyegerakkan Pakej NPM Antara Berbilang Pendaftaran

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-25 07:53:11925semak imbas

Syncing an NPM Package Between Multiple Registries

Foto oleh Nicolas Radzimski di Unsplash

Masalahnya

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.

Percubaan 1: Menggunakan Permintaan HTTP untuk Meniru NPM CLI

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.

Mengapa ia gagal:

• Prosesnya terlalu kompleks dan rapuh.
• Ia memerlukan membina keseluruhan manifes package.json secara manual untuk setiap versi.
• Setiap kesilapan kecil membawa kepada bungkusan rosak.

Percubaan 2: Memanfaatkan npm-registry-sync

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.

Mengapa ia tidak berkesan untuk saya:

• 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.

Penyelesaian Kemenangan: NPM CLI

Akhirnya, saya menyedari bahawa saya boleh berpegang pada CLI NPM yang telah dicuba dan benar. Langkah-langkahnya adalah mudah:

  1. Pasang pakej secara setempat dari Pejabat Pendaftaran A.
    1. Konfigurasikan semula NPM untuk menunjuk ke Registry B.
    2. Terbitkan pakej ke Registry B.

Walaupun ini berfungsi seperti daya tarikan, terdapat beberapa langkah tambahan yang diperlukan untuk menjadikannya mesra CI.


Mengkonfigurasi NPM untuk Pendaftaran Berbilang

Menguruskan konfigurasi pendaftaran secara dinamik dalam saluran paip CI agak rumit.

Begini cara saya menyelesaikannya:

Konfigurasi Umum

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:).

Persatuan Pakej ke Pendaftaran

Untuk mengaitkan ruang nama atau pakej tertentu dengan pendaftaran:

npm config set "<your namespace>:registry" "<your registry url with https:>"

Mengendalikan Pengesahan dalam Talian Paip CI

Sesetengah pendaftaran memerlukan kombo nama pengguna/kata laluan, manakala yang lain menggunakan token. Inilah yang saya pelajari:

Token

Token adalah mudah, tetapi pastikan anda menanggalkan protokol semasa mengkonfigurasi URL pengesahan:

npm config set "//my.awesome.registry.com:<parameter name>=<parameter value>"

Pengesahan Asas

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.

Skrip siap

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

Pengajaran Utama yang Dipelajari

  1. Berpegang pada Alat Mudah:
    npm CLI mungkin tidak sesuai untuk tugasan ini, tetapi ia boleh dipercayai dan menyelesaikan tugas.

  2. Perhatikan Butiran:
    Mengkonfigurasikan pengesahan, terutamanya dengan base64, boleh mempunyai ciri khusus platform yang halus.

  3. 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn