Нека npm го избира регистарот според опсегот на пакетот, а не VPN
Записот за опсег ги праќа пакетите на компанијата во приватен регистар, а сето останато го остава јавно. Рутирањето, акредитивите и предноста се уште три одлуки.
Поврзувањето со VPN не треба да значи уредување на поставката за регистар во npm двапати дневно. Записот за опсег во конфигурациска датотека на ниво на проект може да ги прати пакетите на компанијата во еден регистар, а сето останато во јавниот, без префрлање и без препишување оставено во петок попладне. Проблемот е што ова го решава само именувањето; рутирањето, акредитивите и предноста на конфигурацијата се три одделни работи, од кои секоја пропаѓа на свој начин.
Две имиња, две дестинации
Името на пакет во npm или има опсег, или нема. Името со опсег започнува со знакот @ и идентификатор на опсег, и токму тој идентификатор конфигурацијата може да го мапира. Ништо друго кај пакетот не е важно за мапирањето. Регистарот никогаш не гледа барање врз основа на тоа дали пакетот е внатрешен или јавен; гледа само име.
Затоа датотеката подолу изразува две намери во три реда: јавните пакети одат во јавниот регистар, а пакетите под опсегот на компанијата одат во регистарот на компанијата со токен за тој домаќин.
registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}Заменете го опсегот, домаќинот и името на променливата со она што организацијата навистина го обезбедува. Структурата е важна, не примерните вредности. Два реда конфигурација ја носат целата политика, затоа вреди да се разберат наместо да се копираат.
Држете го мапирањето и мрежата во одделни прегради во главата. Записот за опсег не може да направи недостапен домаќин да биде достапен, а тунел што работи не може да му каже на npm на кој регистар му припаѓа пакетот.
Напишете ја датотеката во правилен редослед
Ставете ја проектната датотека на прво место во вашето размислување, иако npm чита неколку датотеки. .npmrc во директориумот на проектот е онаа што вашите колеги ја наследуваат преку складиштето, па затоа треба да ја изразува заедничката политика, а не вашиот личен токен. Таа датотека е и онаа што рецензентот ќе ја чита. Држете ја доволно мала за да се прегледа со еден поглед.
Оставете ја стандардната линија registry да покажува на јавниот регистар, освен ако организацијата не одлучила поинаку. Нејзиното отстранување ја прави машината зависна од она што го вели датотеката на ниво на корисник, а тоа е токму онаа имплицитна зависност што дава различни резултати на два преносни компјутери.
Линијата за опсег не е џокер знак. Името надвор од опсегот продолжува да ја користи стандардната вредност, и тоа е однесувањето што го сакате за секоја зависност што не сте ја напишале самите.
Проверете во што се разложува датотеката пред да ја потврдите, користејќи еднократно име на пакет наместо вистинска инсталација, за грешката да не чини ништо.
Акредитивите и припаѓаат на домаќин, не на проект
Записите за автентикација се врзани за домаќин на регистар и, каде што регистарот го бара тоа, за патека. Затоа линијата за токен започнува со двојната коса црта и домаќинот, а не со опсегот. Откако ќе го видите домаќинот на таа позиција, остатокот од линијата престанува да изгледа како произволна интерпункција. Тоа е адреса, а токенот е прикачен на неа.
Користењето променлива од околината го држи буквалниот токен надвор од датотеката во складиштето. Тоа не го прави токенот невидлив насекаде; тој сѐ уште се појавува во околината на процесот, а командата што ја печати конфигурацијата може да го открие.
Обезбедете ја променливата преку кој било локален или CI механизам за акредитиви што организацијата го одобрува, и никогаш не вметнувајте вистински токен во пример што може да се копира во документацијата.
Ако се вклучени два регистри, секој добива свој запис. Една неквалификувана поставка за токен е во најдобар случај двосмислена, а во најлош случај испратена до погрешен домаќин.
Кога победува погрешниот регистар
Конфигурацијата е слоевита, а важечката вредност не е нужно вредноста во датотеката што штотуку сте ја уредиле. Поставките на проектот, поставките на корисникот, глобалните поставки и променливите од околината сите учествуваат. Ова слоевитост е причината зошто поправката работи на вашата машина, а не во контејнерот на колега. Таа е и причината зошто вреди да се испечати ефективната вредност пред да се расправате за неа.
Променливата од околината е вообичаениот виновник во CI, каде што задачата го поставува регистарот еднаш и секој следен чекор го наследува. Вториот најчест е датотека на ниво на корисник на машината на развивач што го надјачува она што го вели складиштето.
Испечатете ја ефективната конфигурација и разложениот регистар за едно име со опсег и едно без опсег пред да отстранувате грешки во нешто друго. Ако тие два одговори се она што го очекувате, проблемот е мрежата; ако не се, проблемот е конфигурацијата и никаква работа со VPN нема да помогне.
Контролна листа пред потврдување
Потврдете дека името на опсегот се совпаѓа со пакетите што се навистина објавени, дека стандардниот регистар е експлицитен и дека линијата за токен го наведува правилниот домаќин. Печатна грешка во опсегот го создава најчудниот неуспех од сите, бидејќи пакетот се разложува од јавниот регистар и враќа туѓ модул со истото име. Проверете го името пред да го отстранувате проблемот со токенот.
Потврдете дека приватниот регистар е достапен од машината во контекстот што ја извршува инсталацијата, а не само од вашиот прелистувач. Таа разлика е важна кога посредник или контејнер има различно рутирање од вашата обвивка.
Потоа потврдете го однесувањето на чисто извлекување без кеширани пакети. Свежата инсталација е единствениот тест што покажува што ќе доживее нов колега.