Няхай 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 не дапаможа.
Кантрольны спіс перад фіксацыяй
Пераканайцеся, што імя абсягу адпавядае пакетам, якія фактычна апублікаваныя, што прадвызначаны рэестр пазначаны яўна і што радок токена называе правільны хост. Друкавая памылка ў абсягу дае найбольш дзіўны збой з усіх, бо пакет развязаецца з публічнага рэестра і вяртае чужы модуль з такім жа імем. Праверце імя, перш чым адладжваць токен.
Пераканайцеся, што прыватны рэестр дасяжны з машыны ў тым кантэксце, які выконвае ўсталёўку, а не проста з вашага браўзера. Гэта розніца важная, калі проксі або кантэйнер мае іншую маршрутызацыю, чым ваша абалонка.
Затым пераканайцеся ў паводзінах на чыстай выгрузцы без кэшаваных пакетаў. Свежая ўсталёўка — адзіны тэст, які паказвае, што адчуе новы калега.