Hayaang piliin ng npm ang registry ayon sa scope ng package, hindi sa VPN
Ang isang entry na scope ay nagpapadala ng mga package ng kumpanya sa isang pribadong registry at iniiwan ang lahat ng iba bilang pampubliko. Ang routing, mga kredensyal at precedence ay tatlo pang desisyon.
Ang pagkonekta ng VPN ay hindi dapat mangahulugan ng pag-edit ng setting ng registry ng npm nang dalawang beses sa isang araw. Ang isang entry na scope sa isang configuration file sa antas ng proyekto ay maaaring magpadala ng mga package ng kumpanya sa isang registry at lahat ng iba pa sa pampublikong isa, nang walang paglilipat at walang override na naiwan tuwing Biyernes ng hapon. Ang problema ay nalulutas lamang nito ang pagbibigay ng pangalan; ang routing, mga kredensyal at precedence ng configuration ay tatlong magkahiwalay na bagay na bawat isa ay nabigo sa sarili nitong paraan.
Dalawang pangalan, dalawang destinasyon
Ang pangalan ng npm package ay may scope o wala. Ang pangalang may scope ay nagsisimula sa at-sign at isang scope identifier, at ang identifier na iyon ang maaaring i-map ng configuration. Wala nang ibang tungkol sa package ang mahalaga sa pag-map. Hindi kailanman nakikita ng registry ang isang kahilingang nakabatay sa kung ang package ay panloob o pampubliko; pangalan lamang ang nakikita nito.
Kaya ang file sa ibaba ay nagpapahayag ng dalawang layunin sa tatlong linya: ang mga pampublikong package ay pumupunta sa pampublikong registry, at ang mga package sa ilalim ng scope ng kumpanya ay pumupunta sa registry ng kumpanya na may token para sa host na iyon.
registry=https://registry.npmjs.org/
@acme:registry=https://packages.corp.example/
//packages.corp.example/:_authToken=${NPM_TOKEN}
Palitan ang scope, host at pangalan ng variable ng kung ano talaga ang ibinibigay ng organisasyon. Ang mahalaga ay ang istruktura, hindi ang mga halimbawang halaga. Dalawang linya ng configuration ang nagdadala ng buong patakaran, kaya sulit itong unawain kaysa kopyahin.
Ihiwalay sa isip mo ang pag-map at ang network. Ang isang entry na scope ay hindi makakagawa ng naaabot ang isang host na hindi naaabot, at ang gumaganang tunnel ay hindi makapagsasabi sa npm kung aling registry nabibilang ang isang package.
Isulat ang file sa tamang pagkakasunod-sunod
Unahin ang file ng proyekto sa iyong pag-iisip kahit nagbabasa ang npm ng ilang file. Ang .npmrc sa direktoryo ng proyekto ang namamana ng mga kasamahan mo sa pamamagitan ng repository, kaya dapat nitong ipahayag ang pinagsasaluhang patakaran at hindi ang personal mong token. Ang file ding iyon ang babasahin ng isang tagasuri. Panatilihin itong sapat na maliit upang masuri sa isang tingin.
Iwanan ang default na linyang registry na nakaturo sa pampublikong registry maliban kung nagpasya ang organisasyon ng iba. Ang pag-alis nito ay nagpapadepende sa makina sa sinasabi ng file sa antas ng user, na siya mismong uri ng implicit na dependency na nagdudulot ng magkaibang resulta sa dalawang laptop.
Ang linyang scope ay hindi wildcard. Ang pangalang labas ng scope ay patuloy na gumagamit ng default, na siyang pag-uugaling gusto mo para sa bawat dependency na hindi mo mismo isinulat.
Suriin kung ano ang nireresolba ng file bago mo ito i-commit, gamit ang isang pansamantalang pangalan ng package kaysa sa tunay na pag-install, upang ang isang pagkakamali ay walang gastos.
Ang mga kredensyal ay pag-aari ng host, hindi ng proyekto
Ang mga entry ng authentication ay naka-key sa isang host ng registry at, kung kailangan ito ng registry, sa isang path. Kaya nagsisimula ang linyang token sa dobleng slash at host kaysa sa scope. Kapag nakita mo na ang host sa posisyong iyon, ang natitirang bahagi ng linya ay hindi na mukhang arbitraryong bantas. Ito ay isang address, at ang token ay nakakabit dito.
Ang paggamit ng environment variable ay nagpapanatili ng literal na token sa labas ng file sa repository. Hindi nito ginagawang invisible ang token sa lahat ng lugar; lumalabas pa rin ito sa environment ng proseso, at ang isang command na nagpi-print ng configuration ay maaaring magbunyag nito.
Ibigay ang variable sa pamamagitan ng anumang lokal o CI na mekanismo ng kredensyal na inaprubahan ng organisasyon, at huwag kailanman i-paste ang tunay na token sa isang halimbawang maaaring makopya sa dokumentasyon.
Kung may dalawang registry, bawat isa ay may sariling entry. Ang isang setting ng token na walang qualifier ay sa pinakamabuting kalagayan ay malabo at sa pinakamasama ay ipinadala sa maling host.
Kapag nanalo ang maling registry
Ang configuration ay may mga patong, at ang value na umiiral ay hindi laging ang value sa file na kaka-edit mo lang. Ang mga setting ng proyekto, setting ng user, global na setting at environment variable ay lahat nakikibahagi. Dahil sa pagpapatong na iyon kaya gumagana ang isang pagtatama sa makina mo at hindi sa container ng kasamahan mo. Iyon din ang dahilan kung bakit sulit i-print ang effective na value bago ka makipagtalo tungkol dito.
Ang environment variable ang karaniwang salarin sa CI, kung saan isang beses nagtatakda ng registry ang isang job at namamana ito ng bawat susunod na hakbang. Ang pangalawang pinakakaraniwan ay isang file sa antas ng user sa makina ng developer na nagsasapaw sa sinasabi ng repository.
I-print ang effective na configuration at ang naresolbang registry para sa isang pangalang may scope at isang walang scope bago mag-debug ng anupaman. Kung ang dalawang sagot na iyon ay ang inaasahan mo, ang problema ay network; kung hindi, ang problema ay configuration at walang halaga ng trabaho sa VPN ang makakatulong.
Checklist bago mag-commit
Kumpirmahin na tumutugma ang pangalan ng scope sa mga package na talagang nailathala, na tahasan ang default na registry, at na tinukoy ng linyang token ang tamang host. Ang isang typo sa scope ay gumagawa ng pinakakahang-hangang kabiguan sa lahat, dahil nireresolba ang package mula sa pampublikong registry at nagbabalik ng module ng ibang tao na may parehong pangalan. Suriin ang pangalan bago i-debug ang token.
Kumpirmahin na naaabot ang pribadong registry mula sa makina sa kontekstong nagpapatakbo ng pag-install, hindi lamang mula sa browser mo. Mahalaga ang pagkakaibang iyon kapag ang isang proxy o container ay may ibang routing kaysa sa shell mo.
Pagkatapos ay kumpirmahin ang pag-uugali sa isang malinis na checkout na walang naka-cache na package. Ang sariwang pag-install ang tanging pagsubok na nagpapakita ng mararanasan ng isang bagong kasamahan.