Pripojenie VPN by nemalo znamenať upravovanie nastavenia registra npm dvakrát denne. Záznam scope v konfiguračnom súbore na úrovni projektu dokáže poslať firemné balíky do jedného registra a všetko ostatné do verejného, bez prepínania a bez prepisu, ktorý zostane na piatkové popoludnie. Háčik je v tom, že to rieši iba pomenovanie; smerovanie, prihlasovacie údaje a priorita konfigurácie sú tri oddelené veci, ktoré zlyhávajú každá po svojom.

Dva názvy, dva ciele

Názov balíka npm má scope alebo nemá. Názov so scope začína zavináčom a identifikátorom scope a práve tento identifikátor dokáže konfigurácia namapovať. Na mapovanie nezáleží nič iné o balíku. Register nikdy nevidí požiadavku podľa toho, či je balík interný alebo verejný; vidí iba názov.

Súbor nižšie teda vyjadruje dva zámery v troch riadkoch: verejné balíky idú do verejného registra a balíky pod firemným scope idú do firemného registra s tokenom pre tohto hostiteľa.

registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}

Nahraďte scope, hostiteľa a názov premennej tým, čo organizácia skutočne poskytuje. Dôležitá je štruktúra, nie ukážkové hodnoty. Dva riadky konfigurácie nesú celú politiku, a preto sa ich oplatí pochopiť namiesto kopírovania.

Držte mapovanie a sieť v hlave v oddelených priehradkách. Záznam scope nedokáže sprístupniť nedostupného hostiteľa a funkčný tunel nedokáže npm povedať, do ktorého registra balík patrí.

Napíšte súbor v správnom poradí

Vo svojom uvažovaní dajte projektový súbor na prvé miesto, aj keď npm číta viacero súborov. .npmrc v adresári projektu je ten, ktorý vaši kolegovia dedia cez repozitár, takže by mal vyjadrovať spoločnú politiku, nie váš osobný token. Práve tento súbor bude čítať aj recenzent. Udržujte ho taký malý, aby sa dal skontrolovať na jeden pohľad.

Nechajte predvolený riadok registry ukazovať na verejný register, pokiaľ sa organizácia nerozhodla inak. Jeho odstránenie spôsobí, že stroj bude závisieť od toho, čo hovorí súbor na úrovni používateľa, čo je presne ten typ implicitnej závislosti, ktorý prináša odlišné výsledky na dvoch notebookoch.

Riadok so scope nie je zástupný znak. Názov mimo scope naďalej používa predvolenú hodnotu, čo je správanie, ktoré chcete pre každú závislosť, ktorú ste sami nenapísali.

Pred commitom skontrolujte, na čo sa súbor rozkladá, a použite jednorazový názov balíka namiesto skutočnej inštalácie, aby chyba nič nestála.

Prihlasovacie údaje patria hostiteľovi, nie projektu

Záznamy autentifikácie sú naviazané na hostiteľa registra a tam, kde to register vyžaduje, na cestu. Preto riadok s tokenom začína dvojitou lomkou a hostiteľom, nie scope. Keď raz uvidíte hostiteľa na tom mieste, zvyšok riadku prestane vyzerať ako náhodná interpunkcia. Je to adresa a token je k nej pripojený.

Použitie premennej prostredia udrží doslovný token mimo súboru v repozitári. Neznamená to, že token je neviditeľný všade; stále sa objavuje v prostredí procesu a príkaz, ktorý vypíše konfiguráciu, ho môže prezradiť.

Zabezpečte premennú cez akýkoľvek miestny alebo CI mechanizmus prihlasovacích údajov, ktorý organizácia schvaľuje, a nikdy nevkladajte skutočný token do príkladu, ktorý by sa mohol skopírovať do dokumentácie.

Ak sú v hre dva registre, každý dostane vlastný záznam. Jediné nekvalifikované nastavenie tokenu je v lepšom prípade nejednoznačné a v horšom odoslané nesprávnemu hostiteľovi.

Keď vyhrá nesprávny register

Konfigurácia je vrstvená a hodnota, ktorá platí, nemusí byť hodnotou v súbore, ktorý ste práve upravili. Zúčastňujú sa nastavenia projektu, nastavenia používateľa, globálne nastavenia aj premenné prostredia. Práve pre toto vrstvenie oprava funguje na vašom stroji a nie v kontajneri kolegu. Aj preto sa oplatí vypísať účinnú hodnotu skôr, než o nej budete diskutovať.

Zvyčajným vinníkom v CI je premenná prostredia, kde úloha nastaví register raz a každý ďalší krok ho zdedí. Druhou najčastejšou príčinou je súbor na úrovni používateľa na stroji vývojára, ktorý prepisuje to, čo hovorí repozitár.

Pred akýmkoľvek ladením vypíšte účinnú konfiguráciu a vyriešený register pre jeden názov so scope a jeden bez neho. Ak sú tieto dve odpovede podľa očakávania, problém je v sieti; ak nie, problém je v konfigurácii a akákoľvek práca s VPN nepomôže.

Kontrolný zoznam pred commitom

Overte, že názov scope zodpovedá skutočne publikovaným balíkom, že predvolený register je výslovný a že riadok s tokenom uvádza správneho hostiteľa. Preklep v scope spôsobí najčudnejšie zlyhanie zo všetkých, pretože balík sa vyrieši z verejného registra a vráti modul niekoho iného s rovnakým názvom. Pred ladením tokenu skontrolujte názov.

Overte, že súkromný register je dostupný zo stroja v kontexte, ktorý spúšťa inštaláciu, nielen z vášho prehliadača. Tento rozdiel je dôležitý, keď má proxy alebo kontajner iné smerovanie ako váš shell.

Potom overte správanie na čistom checkoute bez balíkov v cache. Čerstvá inštalácia je jediný test, ktorý ukáže, čo zažije nový kolega.

Súvisiace články