Повезивање VPN-а не би требало да значи мењање подешавања регистра у npm два пута дневно. Унос scope у конфигурационој датотеци на нивоу пројекта може да пошаље пакете компаније у један регистар, а све остало у јавни, без пребацивања и без override-а који остаје за петак поподне. Цака је у томе што ово решава само именовање; рутирање, акредитиви и приоритет конфигурације су три одвојене ствари које свака на свој начин отказује.

Два имена, два одредишта

Име npm пакета има scope или га нема. Име са scope почиње знаком at и идентификатором scope, и управо тај идентификатор конфигурација може да мапира. Ништа друго о пакету није важно за мапирање. Регистар никада не види захтев заснован на томе да ли је пакет интерни или јавни; он види само име.

Дакле, датотека испод изражава две намере у три реда: јавни пакети иду у јавни регистар, а пакети под scope-ом компаније иду у регистар компаније са токеном за тај host.

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

Замените scope, host и име променљиве оним што организација заиста пружа. Важна је структура, а не вредности из примера. Два реда конфигурације носе целу политику, због чега их је вредно разумети уместо копирати.

Држите мапирање и мрежу у одвојеним преградама у глави. Унос scope не може да учини недоступан host доступним, а тунел који ради не може да каже npm-у којем регистру пакет припада.

Напишите датотеку у правом редоследу

Ставите пројектну датотеку на прво место у свом размишљању, иако npm чита неколико датотека. .npmrc у директоријуму пројекта је онај који ваше колеге наслеђују кроз repository, па би требало да изражава заједничку политику, а не ваш лични токен. Та датотека је и она коју ће прегледач прочитати. Држите је довољно малом да се прегледа на један поглед.

Оставите подразумевани ред registry да показује на јавни регистар, осим ако организација није одлучила другачије. Његово уклањање чини машину зависном од онога што каже датотека на нивоу корисника, што је управо врста имплицитне зависности која даје различите резултате на два лаптопа.

Ред scope-а није џокер знак. Име изван scope-а наставља да користи подразумевану вредност, што је понашање које желите за сваку зависност коју нисте сами написали.

Проверите на шта се датотека разрешава пре него што је commit-ујете, користећи привремено име пакета уместо праве инсталације, тако да грешка ништа не кошта.

Акредитиви припадају host-у, а не пројекту

Уноси за аутентификацију су везани за host регистра и, где регистар то захтева, за путању. Зато ред са токеном почиње двоструком косом цртом и host-ом, а не scope-ом. Када једном видите host на том месту, остатак реда престаје да изгледа као произвољна интерпункција. То је адреса, и токен је прикачен на њу.

Коришћење променљиве окружења држи дословни токен изван датотеке у repository-ју. То не чини токен невидљивим свуда; он се и даље појављује у окружењу процеса, а команда која исписује конфигурацију може да га открије.

Обезбедите променљиву кроз било који локални или CI механизам акредитива који организација одобрава, и никада не налепите прави токен у пример који би могао да се копира у документацију.

Ако су у игри два регистра, сваки добија свој унос. Једно неквалификовано подешавање токена је у најбољем случају двосмислено, а у најгорем послато погрешном host-у.

Када победи погрешан регистар

Конфигурација је слојевита, а вредност на снази није нужно вредност у датотеци коју сте управо изменили. Подешавања пројекта, корисника, глобална подешавања и променљиве окружења сви учествују. Због тог слојевита исправка ради на вашој машини, а не у колегином контејнеру. Такође је зато вредно исписати ефективну вредност пре него што се о њој расправљате.

Уобичајени кривац у CI је променљива окружења, где посао једном подеси регистар и сваки каснији корак га наслеђује. Други најчешћи је датотека на нивоу корисника на машини програмера која замењује оно што каже repository.

Испишите ефективну конфигурацију и разрешени регистар за једно име са scope-ом и једно без њега пре него што почнете да отклањате било шта друго. Ако су та два одговора она која очекујете, проблем је мрежа; ако нису, проблем је конфигурација и никаква количина рада на VPN-у неће помоћи.

Контролна листа пре commit-а

Потврдите да се име scope-а поклапа са стварно објављеним пакетима, да је подразумевани регистар експлицитан и да ред са токеном наводи исправан host. Грешка у куцању у scope-у производи најчуднији квар од свих, јер се пакет разрешава из јавног регистра и враћа модул неког другог са истим именом. Проверите име пре него што отклањате грешку у токену.

Потврдите да је приватни регистар доступан са машине у контексту који покреће инсталацију, не само из вашег прегледача. Та разлика је важна када proxy или контејнер има другачије рутирање од вашег shell-а.

Затим потврдите понашање на чистом checkout-у без кешираних пакета. Свежа инсталација је једини тест који показује шта ће нови колега доживети.

Повезани чланци