Tek bir npmrc dosyasında birden çok kayıt yapılandırmanın herhangi bir yolu var mı


143

İşte benim sorunum. Yalnızca VPN'de çalışan özel bir NPM kaydımız var. VPN dışında kaldığımda sorunsuz bir şekilde çalışması için https://registry.npmjs.org bir yedek kayıt defteri istiyorum.

PS Şu anda bir çözüm olarak .npmrc dosyaları arasında geçiş iyi bir iş yapan npmrc kullanıyorum


8
Aslında aynı şeyi bilmek isterdim. Belki de ya benim özel kayıt ilk pinged var ve bu genel kayıt defteri (yerel fallback, özel sunucuda bir kurulum değil) geri dönüş başarısız olursa. Ya da alternatif olarak wifi adımı temel alarak kayıt defterini değiştiriyorum.
ProLoser

1
benim gibi kayıp ruhlar için npmrc'ye faydalı bir doktor
Andreas

Yanıtlar:


194

Dosyanızda kapsamlı paketler için birden fazla kaydınız olabilir .npmrc. Örneğin:

@polymer:registry=<url register A>
registry=http://localhost:4873/

@polymerKapsam kapsamındaki paketler https://registry.npmjs.org adresinden alınacaktır , ancak geri kalanı yerel NPM'nizden alınacaktır.


15
Bu tavsiye için teşekkürler. Lütfen, bu kapsamlı kayıtlara kimlik doğrulama eklemek mümkün mü diyebilir misiniz? Çünkü ana kayıt defteri için _auth anahtarına ihtiyacım var.
Bloomca

3
Kapsamlı paket nedir? Bunu hiç duymadım.
jcollum

1
@jcollum, Kapsamlı paketler, bir ad alanı aracılığıyla gruplanan (veya kapsamlandırılmış) paketlerdir. Ayrıntılar için docs.npmjs.com/misc/scope adresine bakın. Kapsam belirleme, bir paketin (@ açısal / çekirdek) Angular'ın bir parçası olduğunu bilmeyi kolaylaştıran birkaç paketi (@angular gibi) ilişkilendirmek için kullanılabilir, ancak @ mycompany / mypackage gibi bir şirket de olabilir.
2018'de PatS

6
Kapsamlı paketler olmadan bu mümkün müdür? diyelim ki bu özel paketi arıyoruz bu kayıt defterine git, aksi halde o kayıt defterine git
PinguinoSod

2
@PinguinoSod, Hayır, kapsam dışı paketler için hala (Aralık 2019 itibariyle) mümkün değildir. Sonatype bildiğim tek çözüm. Bkz. Stackoverflow.com/a/50995915/3281336
PatS

71

4.4.1 sürümünde, paket adını değiştirebiliyorsanız şunu kullanın:

npm config set @myco:registry http://reg.example.com

@mycoPaket kapsamınız nerede .

Paketi şu şekilde kurabilirsiniz:

npm install @myco/my-package

Daha fazla bilgi için: https://docs.npmjs.com/misc/scope


Ayrıca paketinizi kapsamla (npm init --scope = myco) başlatmanız ve daha sonra yayınlamanız gerekir.
gjegadesh

1
Tamam ama bu kayıt için nasıl bir geri dönüş var
CharybdeBE

1
Ben alıyorum Invalid package name "@npmjs/": name can only contain URL-friendly charactersben çalıştırdığınızdanpm i
umutesen

Ben de sadece URL dostu karakterler hata içerebilir adı var
katwhocodes

Bu yaklaşım benim için daha temiz görünüyor. Bunu package.json içinde yapmanın bir yolu var mı?
Hari Krishna Gaddipati

19

Kimlik doğrulaması için bir çözüm arayan herkes için, .npmrcdosyanızda birden fazla satır olabileceğiniz kapsamlı paketler çözümünü eklerim :

//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy

Her satır farklı bir NPM kayıt defterini temsil eder


4
Komutu kullanırdım npm login --registry=npm.example.com. Oturum açma kimlik bilgilerini (authTokens) kullanıcı klasörünüzdeki .npmrc dosyasında saklar, bu yüzden kaynak kodunda ( docs.npmjs.com/cli/adduser )
magikMaker

benim için çalıştı, teşekkürler, Temelde benim lib özel nexus kayıt vardı ama benim Lib yüklemeniz gereken birkaç bağımlılıkları var registry.npmjs.org, bu benim için çalıştı
Chanuka Asanka

17

En iyi yol değil ama Windows'ta bile mac veya linux kullanıyorsanız farklı kayıtlar için takma ad ayarlayabilirsiniz.

##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'

2
Benzer bir çözüm --registry seçeneğini npm'ye geçiren bir takma ad oluşturmaktır. Bu aynı etkiye sahiptir, ancak sadece tek komut için. Sözdizimialias npm-sin=npm --registry https://localhost:4873/
PatS

11

Birkaç yıl geçtiğinden ve bunu yapmak mümkün görünmediğinden (yalnızca npm kullanarak), bu sorunun çözümü Nexus Depo Yöneticisini (Sonatype'dan) kullanmaktır. Nexus çoklu depoları destekler, sipariş etmenizi sağlar ve ayrıca hızı artırmak için vekil sunucuları / önbellekler sağlar.

Ücretsiz bir sürümü ve pro / ücretli sürümü var. Bunu destekleyen özellik şu adreste açıklanmıştır: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-registries

İlgili bilgiler aşağıda kopyalanmıştır, bu nedenle yukarıdaki URL / bağlantı çalışmayı durdurursa / durdurulursa, bilgi hala buradadır.

Bir veri havuzu grubu, daha fazla istemci tarafı yapılandırmasına gerek kalmadan tüm npm kayıt havuzlarınızı veri havuzu yöneticisinden kullanıcılarınıza göstermenin önerilen yoludur. Havuz grubu, birden çok proxy'nin ve barındırılan havuzların birleştirilmiş içeriğini bir URL ile npm ve diğer araçlara göstermenize olanak tanır.

Özel npm kayıtları oluşturmanıza olanak tanır

Kendi paketlerinizi ve üçüncü taraf paketlerini yüklemek için özel bir npm kayıt defteri kullanılabilir.

Ve

Geliştiricileriniz ve CI sunucularınız için yinelenen indirmeleri azaltmak ve indirme hızlarını artırmak için, https://registry.npmjs.org adresinde barındırılan kayıt defterini proxy olarak kullanmalısınız . Varsayılan olarak npm bu kayıt defterine doğrudan erişir. Ayrıca, ihtiyacınız olan diğer kayıtların proxy'sini de yapabilirsiniz.

Dolayısıyla, bu çalışmayı sağlamak için yaptığınız şeylerin hızlı bir madde işaretli listesi:

  • Nexus'u yükle

  • Yerel / özel bir repo oluşturun (veya başka bir sunucudaki özel repo'nuzu gösterin)

  • Özel deponuzu ve genel repoyu listeleyen bir GRUP oluşturun.

  • $ HOME / .npmrc dosyanızı yeni oluşturulmuş "GROUP" u işaret edecek şekilde yapılandırın.

  • Özel npm paketlerinizi yerel repoda yayınlayın.

  • Kullanıcılar artık tek seferlik bir kurulum yapabilir.

npm config set registry https://nexus/content/groups/GROUP

  • Daha sonra kullanıcılar hem genel hem de özel paketleri yükleyebilirler npm install. npm install my-private-package npm install lodash any-other-public-package

Hem genel hem de özel paketleriniz basit bir npm installkomutla kurulabilir . Nexus, grupta yapılandırılan her bir depoda arama yapan paketi bulur ve sonuçları döndürür. Yani npm hala sadece bir kayıt olduğunu düşünüyor ama perdenin arkasında kullanılan çoklu depolar var.

ÖNEMLİ NOT: Bileşenlerinizi npm publish --registry https://nexus/content/repositories/private-repo my-private-packageyayınladığınızda, paketinizin doğru depoda yayınlanması için komutu belirtmeniz gerekir .


npm yayıncılığı yaptığım her zaman bahsetmek zorunda değilim. Artefaktlarımı itmek için ayrı npm deposu kullanıyorum ve tüm artefaktlar için sanal depo kullanıyorum. Lütfen .npmrc dosyasında her ikisini de yapılandırmama yardımcı olun.
Anshita Singh

1
@AnshitaSingh Daha yeni başladım. Benim gibi yayınlamak için farklı bir havuzunuz varsa (örneğin, npm-privateyerine npm-group), projenizdeki registry-key'i geçersiz kılabilirsiniz package.json( https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packagesayrıntılar için bkz .). Kullanılması npm config set registry <url>sizi örn şekilde ayarlayabilirsiniz npm-groupiçeren, npm-registry(yönlendirme depoyu) ve npm-private(kendi depo). Bu çözümü kullandım, çünkü yerel GitLab CE'den eserler çıkarmak çok karmaşıktı.
Igor

7

Dosyanızdaki registrygiriş için birden çok havuz sözdizimi kullanabilirsiniz .npmrc:

registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/

Bu, npm'nizin farklı sunuculardaki paketleri aramasını sağlar.


Evet, ama serverA, serverBve serverCörnek depoları İç ağımız sizin için alışkanlık işten tümü. Sizin için uygun olup olmadığını bilmiyorum ama eğer öyle olduğunu düşünüyorsanız dahili depolar için bir Nexus Depo Yöneticisi dağıtmayı deneyebilirsiniz.
Fernando Fernandes

1
bu cevaba göre çift ​​eğik çizgi hiçbir anlamı yoktur, bu yüzden sadece anahtarları değersiz olarak ayarlıyorsunuz
PinguinoSod

1
Npm / ini özellik dosya okuyucu görebildiğim kadarıyla, // hiçbir değeri olmayan anahtar olarak okunacaktır. Bu arada, kapsamlandırılmış bölümler gibi, ikincil kayıt defteri sunucuları olarak depolanır. Bunlar npm'ye girecek ve npm'in dahili değerlendirme algoritmasına göre kayıt defteri yapılandırma sunucuları olarak işleneceklerdir.
Fernando Fernandes

1
Kimse bu çözümü denedi. Çalışır ve bir yedek havuz yapılandırmaya yardımcı olur mu?
Luke P. Issac

3

Bazı adımlar deneyebilirsiniz. (işyerinde böyle yapıyoruz)

  • İki (veya daha fazla) havuz kaynak adresiyle bir kayıt defteri grubu oluşturun. Biri dahili özel, diğeri npmjs için dahili olana bir vekil olacaktır.
  • Bu grubu .npmrc dosyasındaki kayıt defteriniz yapın. Bu şekilde npm her zaman dahili olandan almaya çalışır, bulunmazsa proxy'den alır

Umarım yardımcı olur.


6
Kişi npm'de nasıl bir kayıt grubu oluşturur? Bu ne anlama geliyor?
Tuupertunut

1
@Tuupertunut kayıt defteri Bunu yapmanın en kolay yolu, sonatype nexus gibi bir tür depo yöneticisi kullanmak olacaktır. Özel kayıtlara, npmjs'de proxy'ye ev sahipliği yapabilir ve depo grupları oluşturabilir.
Kaus Untwale



1

13 Nisan 2020 itibariyle, farklı kapsamları kullanabilmediğiniz sürece böyle bir işlevsellik yoktur, ancak postinstall komut dosyasını geçici çözüm olarak kullanabilirsiniz . Her zaman, yürütüldüğünde iyi her sonra npm yüklemek :

.Npmrc'nizin özel github deposundan @ foo-org / foo-pack-private yükleyecek şekilde yapılandırıldığını , ancak @ foo-org / foo-pack-public genel paketinin npm'de olduğunu (aynı kapsamda: foo- org ).

Sizin postInstall şöyle olabilir:

"scripts": {
    ...
    "postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}

Kaldırmak unutmayın foo-pack / @ foo-org dan bağımlılıkları diziye emin olmak için yüklemek UÖM'sini denemek ve github adresinden elde ve eklenecek gelmez --dry işletilen emin olur bayrağı package.json ve paket- npm kurulumundan sonra lock.json değişmeden kalır .


0

Benim yaklaşımım, kayıt defteri anahtarını ekleyen hafif bir komut satırı varyantı yapmaktı.

Bu dosyaları npm yürütülebilir dosyasının bulunduğu nodejs klasöründe oluşturdum:

npm-.cmd:

@ECHO OFF
npm --registry https://registry.npmjs.org %*

npm-:

#!/bin/sh
"npm" --registry https://registry.npmjs.org "$@"

Şimdi, normal npm kayıt defterine karşı bir işlem yapmak istiyorsam (VPN'ye bağlı değilken), npm-genellikle yazacağım yeri yazarım npm.

Bu komutu sınamak ve bir paketin kayıt defterini görmek için şu örneği kullanın:

npm- view lodash

PS. Windows'tayım ve bunu Bash, CMD ve Powershell'de test ettim. ben de

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.