Ini masalah saya. Kami memiliki registri NPM pribadi yang hanya berfungsi di VPN. Saya ingin memiliki registry cadangan https://registry.npmjs.org sehingga ketika saya keluar dari VPN berfungsi dengan baik.
PS Saat ini saya menggunakan npmrc yang melakukan pekerjaan yang baik dalam beralih antara file .npmrc sebagai solusinya
Jawaban:
Anda dapat memiliki beberapa pendaftar untuk paket yang di - scoped dalam
.npmrc
file Anda . Sebagai contoh:Paket dalam
@polymer
lingkup akan diterima dari https://registry.npmjs.org , tetapi sisanya akan diterima dari NPM lokal Anda.sumber
Pada versi 4.4.1, jika Anda dapat mengubah nama paket, gunakan:
Di mana
@myco
ruang lingkup paket Anda.Anda dapat menginstal paket dengan cara ini:
Untuk info lebih lanjut: https://docs.npmjs.com/misc/scope
sumber
Invalid package name "@npmjs/": name can only contain URL-friendly characters
ketika saya menjalankannpm i
Bagi siapa pun yang mencari solusi untuk otentikasi, saya akan menambahkan pada solusi paket scoped yang Anda dapat memiliki beberapa baris dalam
.npmrc
file Anda :Setiap baris mewakili registri NPM yang berbeda
sumber
npm login --registry=npm.example.com
. Ini akan menyimpan kredensial masuk (authTokens) dalam file .npmrc di folder pengguna Anda, jadi Anda tidak perlu memilikinya dalam kode sumber ( docs.npmjs.com/cli/adduser )registry.npmjs.org
, ini bekerja untuk sayaBukan cara terbaik tetapi Jika Anda menggunakan mac atau linux bahkan di windows Anda dapat mengatur alias untuk pendaftar yang berbeda.
sumber
alias npm-sin=npm --registry https://localhost:4873/
Karena sudah beberapa tahun dan sepertinya tidak mungkin untuk melakukan ini (menggunakan npm saja), solusi untuk masalah ini adalah dengan menggunakan Manajer Repositori Nexus (dari Sonatype). Nexus mendukung beberapa repositori, memungkinkan Anda memesannya, dan juga proxy / cache untuk meningkatkan kecepatan.
Ada versi gratis dan versi pro / berbayar. Fitur yang mendukung ini dijelaskan di: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries
Informasi yang relevan diduplikasi di bawah ini jadi jika / ketika URL / tautan di atas berhenti bekerja informasinya masih di sini.
Ini memungkinkan Anda membuat pendaftar npm pribadi
Dan
Jadi daftar singkat hal-hal yang Anda lakukan untuk mendapatkan pekerjaan ini adalah:
Instal Nexus
Buat repo lokal / pribadi (atau arahkan ke repo pribadi Anda di server lain)
Buat GROUP yang mencantumkan repo pribadi Anda, dan repo publik.
Konfigurasikan file $ HOME / .npmrc Anda untuk menunjuk ke "GROUP" yang baru saja dibuat.
Publikasikan paket npm pribadi Anda ke repo lokal.
Pengguna sekarang dapat menjalankan pengaturan satu kali.
npm config set registry https://nexus/content/groups/GROUP
npm install
.npm install my-private-package npm install lodash any-other-public-package
Dan paket publik dan pribadi Anda dapat diinstal melalui
npm install
perintah sederhana . Nexus menemukan paket yang mencari setiap repo yang dikonfigurasi dalam grup dan mengembalikan hasilnya. Jadi npm masih berpikir hanya ada satu registri tetapi di balik tirai ada beberapa repo yang digunakan.CATATAN PENTING: Ketika Anda menerbitkan komponen Anda, Anda harus menentukan
npm publish --registry https://nexus/content/repositories/private-repo my-private-package
perintah sehingga paket Anda dipublikasikan ke repo yang benar.sumber
npm-private
Alih-alihnpm-group
), Anda dapat menggantiregistry
-key dipackage.json
proyek Anda (lihathttps://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages
untuk detailnya). Menggunakannpm config set registry <url>
Anda dapat mengaturnya ke misalnyanpm-group
, yang berisinpm-registry
(meneruskan repositori) dannpm-private
(repositori Anda sendiri). Saya menggunakan solusi ini, karena mengeluarkan artefak dari GitLab CE lokal terlalu rumit.Anda dapat menggunakan beberapa sintaks repositori untuk
registry
entri dalam.npmrc
file Anda :Itu akan membuat npm Anda mencari paket di server yang berbeda.
sumber
serverA
,serverB
danserverC
contoh repositori semuanya dari jaringan internal kami, tidak akan berfungsi untuk Anda. Saya tidak tahu apakah itu cocok untuk Anda, tetapi jika menurut Anda, Anda dapat mencoba menggunakan Nexus Repository Manager untuk repo internal.Beberapa langkah yang bisa Anda coba. (bagaimana kami melakukannya di tempat kerja saya)
Semoga itu bisa membantu.
sumber
Saya menggunakan alat cli Strongloop untuk itu; lihat https://strongloop.com/strongblog/switch-between-configure-public-and-private-npm-registry/ untuk informasi lebih lanjut
Beralih di antara repositori semudah:
slc registry use <name>
sumber
Saya menghadapi masalah yang sama ketika perusahaan saya mengatur registri sendiri, jadi saya banyak mengerjakan ulang proxy-registri menjadi proxy-multi-pendaftar untuk menyelesaikan masalah ini. Semoga ini juga akan membantu Anda.
sumber
Pada 13 April 2020 tidak ada fungsi seperti itu kecuali Anda dapat menggunakan lingkup yang berbeda, tetapi Anda dapat menggunakan skrip postinstall sebagai solusi. Itu selalu dieksekusi, well , setelah setiap instalasi npm :
Katakanlah Anda memiliki .npmrc Anda dikonfigurasi untuk menginstal @ foo-org / foo-pack-private dari repo github pribadi Anda, tetapi paket publik publik @ foo-org / foo-pack-publik ada di npm (di bawah cakupan yang sama: foo- org ).
Postinstall Anda mungkin terlihat seperti ini:
Jangan lupa untuk menghapus @ foo-pack / foo-org dari array dependensi untuk memastikan npm install tidak mencoba dan mendapatkannya dari github dan menambahkan flag --dry-run yang memastikan package.json dan package- lock.json tetap tidak berubah setelah instalasi npm .
sumber
Pendekatan saya adalah membuat varian sedikit baris perintah yang menambahkan saklar registri.
Saya membuat file-file ini di folder nodejs di mana npm executable ditemukan:
npm-.cmd
:npm-
:Sekarang, jika saya ingin melakukan operasi terhadap registry npm normal (sementara saya tidak terhubung ke VPN), saya cukup mengetik di
npm-
mana saya biasanya mengetiknpm
.Untuk menguji perintah ini dan melihat registri untuk suatu paket, gunakan contoh ini:
PS. Saya di windows dan telah menguji ini di Bash, CMD, dan Powershell. saya juga
sumber