Mundarija (26)
- Bu darsda
- 1. Nega bu kerak?
- 2. Birinchi .npmrc
- 2.1 npm config set
- 2.2 Format
- 3. To'rt daraja va ustuvorlik
- 3.1 Qayerda turadi
- 3.2 Kim yutadi
- 4. Loyiha uchun foydali sozlamalar
- 4.1 engine-strict
- 4.2 fund va audit
- 4.3 Boshqa ko'p uchraydiganlar
- 4.4 npm config buyruqlari
- 5. Registr: paketlar qayerdan keladi
- 5.1 registry
- 5.2 Scope registri
- 5.3 Token: faqat ${O'ZGARUVCHI}
- 5.4 Verdaccio: o'z registringiz
- 6. Ko'p uchraydigan xatolar
- 7. Mashqlar
- 1-mashq (oson): Kim yutadi?
- 2-mashq (o'rta): Jamoa .npmrc i
- 3-mashq (qiyin): Token qo'riqchisi
- 8. Real ishda
- Xulosa
- Manbalar
.npmrc va registry sozlamalari: save-exact, engine-strict, scope registri va token
Qisqacha:
.npmrc— npm sozlamalari fayli, oddiykalit=qiymatqatorlari. U to'rt joyda bo'lishi mumkin: loyiha ildizida (jamoa uchun, Git'da), uy papkangizda (~/.npmrc— faqat siz uchun), global va npm'ning o'zida. Ustuvorlik: buyruq bayrog'i → muhit o'zgaruvchisi → loyiha → foydalanuvchi → global. Loyiha.npmrcidasave-exact,engine-strict, scope registri yoziladi. Token esa faylga hech qachon ochiq yozilmaydi — faqat${O'ZGARUVCHI}havolasi.
Bu darsda
.npmrcning to'rt darajasini va qaysi biri yutishini bilasiz.npm config get/set/lsbilan sozlamalarni o'qiysiz va yozasiz.- Loyihaga
save-exact,engine-strict,fund,auditni qo'yasiz. - Scope uchun alohida registr (
@bahor:registry) va token'ni xavfsiz ulaysiz. - Ochiq token'ni commit'dan oldin ushlaydigan skript yozasiz.
Oldin bilishingiz kerak: Lock-fayllar va npm ci, Semver va versiya diapazonlari, Node versiya menejerlari.
1. Nega bu kerak?
Uchta voqea. Birinchisi: Sardor vazifalar da har paketni -E bilan o'rnatadi (semver darsi). Bobur esa unutdi va package.json ga ^ tushdi. Ikkinchisi: Node versiya menejerlari darsida engines faqat ogohlantirish berdi, --engine-strict ni har safar yozish kerak edi. Uchinchisi: Jasur aka «Bahor» kompaniyasining ichki paketlarini npmjs.com'ga emas, o'z serveriga qo'ymoqchi.
Uchala muammoning yechimi bitta fayl — .npmrc. "rc" — eski Unix an'anasi ("run commands"): dastur ishga tushganda o'qiydigan sozlama fayli. .bashrc, .nvmrc kabi.
Diqqat: Sizning uy papkangizdagi
~/.npmrcdanpm loginqilgan bo'lsangiz, haqiqiy token turadi. Uni ekranga chiqarmang, skrinshot qilmang, chatga yubormang. Biz bu darsda tajribalarni alohida papkada qildik: npm'gaNPM_CONFIG_USERCONFIGbilan vaqtinchalik "foydalanuvchi fayli"ni berdik. Darsdagi token'lar —npm_XXXX…namunasi.
Maslahat: Chiqishlar 2026-10-10 da Windows 11, Node 24.21.0 va npm 11.19.0 bilan olingan. Yo'l boshi
…bilan qisqartirilgan.
2. Birinchi .npmrc
2.1 npm config set
kurs/mashqlar/16/12-npmrc/ da npm init -y. Hozirgi qiymat:
npm config get save-exactfalseLoyiha darajasida yoqamiz:
npm config set save-exact=true --location=projectBuyruq jim tugaydi (chiqish yo'q) — bu muvaffaqiyat belgisi. Loyiha ildizida .npmrc paydo bo'ldi, ichida bitta qator: save-exact=true. Endi -E siz:
npm i picocolors
npm pkg get dependencies
added 1 package, and audited 2 packages in 2s
found 0 vulnerabilities
{
"picocolors": "1.1.1"
}Belgisiz "1.1.1" — xuddi -E yozgandek. Bu fayl Git'ga commit qilinadi va jamoadagi hamma uchun ishlaydi: Bobur endi unutsa ham, ^ tushmaydi.
2.2 Format
; izoh nuqta-vergul yoki # bilan
save-exact=true
engine-strict=trueHar qator — kalit=qiymat. Kalitlar — npm sozlamalari nomi (config hujjati da ~150 ta). Buyruq qatoridagi --save-exact bilan bir xil nom, faqat -- siz. Qo'lda yozsangiz ham bo'ladi — npm config set faqat qulaylik.
3. To'rt daraja va ustuvorlik
3.1 Qayerda turadi
| Daraja | Fayl | Kim uchun |
|---|---|---|
| project (loyiha) | <loyiha>/.npmrc |
jamoa, Git'da |
| user (foydalanuvchi) | ~/.npmrc (C:\Users\<ism>\.npmrc) |
faqat siz, token shu yerda |
| global | <npm prefix>/etc/npmrc |
kompyuterdagi hamma foydalanuvchi |
| builtin | npm ichidagi npmrc |
npm'ning o'z sukutlari |
Foydalanuvchi fayli qayerdaligini npm config get userconfig aytadi. Bu darsda u vaqtinchalik foydalanuvchi.npmrc ga yo'naltirilgan, ichida ikki qator: save-exact=false va fund=false.
3.2 Kim yutadi
Loyihada save-exact=true, "foydalanuvchida" — false:
npm config get save-exact fundsave-exact=true
fund=falsesave-exact — loyihadan (u foydalanuvchidan kuchli), fund — foydalanuvchidan (loyihada yo'q). npm config ls buni ochiq ko'rsatadi:
npm config ls; "user" config from …\foydalanuvchi.npmrc
fund = false
; save-exact = false ; overridden by project
; save-prefix = "^" ; overridden by project
; "project" config from …\kurs\mashqlar\16\12-npmrc\.npmrc
save-exact = true
save-prefix = ""
; "env" config from environment
…; overridden by project — "loyiha ustidan yozdi". save-prefix ni biz yozmaganmiz: npm save-exact=true dan uni o'zi chiqargan (^ o'rniga bo'sh prefiks). Muhit o'zgaruvchisi va bayroq esa loyihadan ham kuchli:
NPM_CONFIG_SAVE_EXACT=false npm config get save-exact
npm config get save-exact --save-exact=falsefalse
falseNPM_CONFIG_<NOM> — har sozlamaning muhit o'zgaruvchisi shakli (katta harf, - → _). CI'da sozlamani faylga tegmasdan o'zgartirish uchun qulay.
flowchart LR
A["--bayroq"] --> B["NPM_CONFIG_*"]
B --> C["loyiha .npmrc"]
C --> D["~/.npmrc"]
D --> E["global npmrc"]
E --> F["npm sukuti"]Chapdan o'ngga — kuchlidan kuchsizga. npm har sozlamani chapdan qidiradi va birinchi topganini oladi.
Tekshirib ko'ring: Sardorning
~/.npmrcidasave-exact=true, loyihada.npmrcyo'q. Bobur o'sha loyihani klonlabnpm i dayjsqildi. Bobur'ningpackage.jsoniga nima yoziladi?
Javob
"^1.11.23" (yoki o'sha kungi versiya). Sardorning ~/.npmrc i faqat uning kompyuterida — Git bilan Bobur'ga bormaydi. Jamoa qoidasi bo'lsa, uni loyiha .npmrc iga yozing.
4. Loyiha uchun foydali sozlamalar
4.1 engine-strict
engines da >=26 (bizda Node 24). Faqat engine-strict=true qatori qo'shilgan .npmrc bilan:
npm installnpm error code EBADENGINE
npm error engine Unsupported engine
npm error engine Not compatible with your version of node/npm: 12-npmrc@1.0.0
npm error notsup Not compatible with your version of node/npm: 12-npmrc@1.0.0
npm error notsup Required: {"node":">=26"}
npm error notsup Actual: {"node":"v24.21.0","npm":"11.19.0"}Node versiya menejerlari darsidagi --engine-strict bayrog'i endi doim yoqilgan — hech kim uni unutmaydi. .npmrc siz shu holatda faqat npm warn EBADENGINE chiqqan va o'rnatish davom etgan edi.
4.2 fund va audit
fund=false
audit=falseBu ikki qator bilan npm install chiqishi bitta qatorga qisqardi:
added 1 package in 1slooking for funding va found 0 vulnerabilities yo'q. fund=false — xavfsiz, faqat shovqinni kamaytiradi. audit=false esa ehtiyot bilan: o'rnatishdagi avtomatik zaiflik tekshiruvi o'chadi. Uni o'chirgan loyiha npm audit ni alohida (CI'da) yuritishi shart — Ta'minot zanjiri xavfsizligi.
4.3 Boshqa ko'p uchraydiganlar
| Sozlama | Nima qiladi | Sukut | Qachon yoqiladi |
|---|---|---|---|
save-exact |
^ siz yozadi |
false |
ilovalarda (vazifalar kabi) |
engine-strict |
engines buzilsa — xato |
false |
Node versiyasi muhim bo'lsa |
fund |
looking for funding xabari |
true |
false — shovqinsiz |
| Sozlama | Nima qiladi | Sukut | Qachon yoqiladi |
|---|---|---|---|
audit |
o'rnatishda zaiflik tekshiruvi | true |
o'chirsangiz — CI'da npm audit |
ignore-scripts |
paketlarning postinstall i ishlamaydi |
false |
xavfsizlik (Ta'minot zanjiri) |
legacy-peer-deps |
peer to'qnashuvini yashiradi | false |
deyarli hech qachon (node_modules ichida) |
"Sukut" ustuni — .npmrc umuman bo'lmaganda npm qaysi qiymatni oladi (npm 11.19.0 hujjati bo'yicha).
vazifalar ga .npmrc Ta'minot zanjiri xavfsizligi darsida qo'shiladi — o'sha yerda xavfsizlik sozlamalari bilan birga.
4.4 npm config buyruqlari
Faylni qo'lda ochmasdan ham ishlash mumkin:
| Buyruq | Nima qiladi |
|---|---|
npm config get nom |
yakuniy qiymat (hamma darajadan keyin) |
npm config set nom=qiymat --location=project |
loyiha fayliga yozadi |
npm config delete nom --location=project |
loyiha faylidan o'chiradi |
npm config ls |
sizning sozlamalaringiz va manbalari |
--location ni unutmang: usiz npm config set foydalanuvchi fayliga (~/.npmrc) yozadi. Bu ko'p uchraydigan chalkashlik: Sardor "loyihaga save-exact qo'ydim" deb o'ylaydi, aslida u faqat o'z kompyuterida yoqilgan. Natijada uning package.json larida aniq versiyalar, jamoadoshlarida — ^. Kim nimani o'zgartirganini git diff ham ko'rsatmaydi, chunki ~/.npmrc Git'da emas.
npm config ls -l esa npm'ning hamma sukut qiymatlarini (yuzdan ortiq) chiqaradi. Uni faqat o'zingiz o'qing: foydalanuvchi faylingizdagi qatorlar ham u yerda bo'ladi. Ekranni ulashishdan yoki chiqishni chatga tashlashdan oldin o'ylang — token (protected) bo'lsa ham, registr manzillari, ichki scope nomlari va yo'llar kompaniya haqida ko'p narsa aytadi.
Tekshirib ko'ring: Bobur
npm config set engine-strict=trueyozdi va hamkasbiga "endi loyihada Node versiyasi majburiy" dedi. To'g'rimi?
Javob
Yo'q. --location siz sozlama Bobur'ning ~/.npmrc iga yozildi — faqat uning kompyuterida ishlaydi. Loyiha uchun: npm config set engine-strict=true --location=project, keyin .npmrc ni commit qilish. Tekshirish: npm config ls — qiymat "project" config from … ostida bo'lishi kerak.
5. Registr: paketlar qayerdan keladi
5.1 registry
Registr (registry) — paketlar ombori-server. Sukut bo'yicha https://registry.npmjs.org/ (npm doctor ham shuni tekshirgan). Uni almashtirish mumkin: kompaniya ichki registri, yoki internet sekin joyda yaqinroq nusxa (mirror). Butun loyiha uchun: registry=https://…. Lekin ko'pincha registrni faqat bitta scope uchun almashtirish kerak bo'ladi.
5.2 Scope registri
«Bahor» ichki paketlari — @bahor/… nomli (pasport darsidagi scope). Loyiha .npmrc:
@bahor:registry=http://localhost:4873/"@bahor bilan boshlangan paketlarni shu manzildan ol, qolganini — odatdagi registrdan". Sinov (bu manzilda server ishlamayapti):
npm view @bahor/narx versionnpm error code ECONNREFUSED
npm error errno ECONNREFUSED
npm error FetchError: request to http://localhost:4873/@bahor%2fnarx failed, reason:
…
npm error If you are behind a proxy, please make sure that the 'proxy' config is set properly. See: 'npm help config'ECONNREFUSED — "ulanish rad etildi": npm aynan localhost:4873 ga bordi, demak scope yo'nalishi ishlayapti. Shu paytning o'zida boshqa paketlar npmjs'dan keladi:
npm view picocolors version1.1.1Scope yo'nalishi xavfsizlik uchun ham muhim. Ichki paket nomi @bahor/narx bo'lsa, begona odam npmjs'da xuddi shu nomli paket chiqara olmaydi — scope egasi bitta. Scope'siz ichki nom esa ("bahor-narx") hujumchiga ochiq: u npmjs'da shu nomni egallab, yuqoriroq versiya chiqarishi mumkin. Bu hujumning nomi — dependency confusion (bog'liqlik chalkashligi), 2021-yilda Alex Birsan ko'plab yirik kompaniyalarda ko'rsatgan.
5.3 Token: faqat ${O'ZGARUVCHI}
Yopiq registr parol so'raydi. npm'da bu — token (kirish kaliti), _authToken kaliti bilan, registr manzili oldidan // bilan:
@bahor:registry=http://localhost:4873/
//localhost:4873/:_authToken=${BAHOR_NPM_TOKEN}${BAHOR_NPM_TOKEN} — npm qiymatni muhit o'zgaruvchisidan oladi. Fayl Git'da tursa ham, token unda yo'q. CI'da o'zgaruvchi maxfiy sozlamadan (GitHub Actions'da secrets) beriladi. npm config ls token'ni ko'rsatmaydi:
; "project" config from …\kurs\mashqlar\16\12-npmrc\.npmrc
@bahor:registry = "http://localhost:4873/"
//localhost:4873/:_authToken = (protected)
audit = false
engine-strict = true
fund = false
save-exact = true
save-prefix = ""(protected) — "himoyalangan". Lekin bu himoya faqat shu buyruqda: faylning o'zini cat qilsangiz, ochiq token ko'rinadi. Shuning uchun faylga hech qachon _authToken=npm_… yozmang.
Tuzoq: o'zgaruvchi berilmasa, npm 11.19.0 ogohlantirmadi — so'rov token'siz ketdi. Registr javobidagi xatoni (401, E401) ko'rib, avval o'zgaruvchi berilganini tekshiring.
npm login esa token'ni foydalanuvchi fayliga (~/.npmrc) ochiq yozadi. Shaxsiy kompyuterda bu odatiy holat. Faqat shu fayl hech qachon loyihaga ko'chib o'tmasin va ekranda ko'rinmasin.
5.4 Verdaccio: o'z registringiz
Verdaccio — Node'da yozilgan kichik registr-server. Rasmiy hujjatga ko'ra npx verdaccio uni http://localhost:4873/ da ishga tushiradi. U o'zida yo'q paketlarni npmjs'dan olib, keshlaydi (uplink). Ishlatilishi: kompaniya ichki paketlari, oflayn kesh, paketni nashr qilishni xavfsiz mashq qilish. Bu darsda biz serverni ishga tushirmadik. Scope yo'nalishini «Scope registri» bo'limidagi ECONNREFUSED bilan isbotladik — 4873 aynan Verdaccio'ning sukut porti. Shunga o'xshash pullik/bulutli xizmatlar: GitHub Packages, GitLab Package Registry, JFrog Artifactory.
Tekshirib ko'ring: Jasur aka: "Token'ni loyiha
.npmrciga yozib qo'ydim, repo yopiq-ku". Siz nima deysiz va qanday tuzatasiz?
Javob
Yopiq repo ham ko'p odamga ko'rinadi (hamkasblar, CI, kelajakdagi xodimlar), Git tarixi esa token'ni abadiy saqlaydi. Tuzatish: token'ni registrda bekor qilish va yangisini yaratish, faylda ${BAHOR_NPM_TOKEN} ga almashtirish, yangi token'ni CI sirlariga va har dasturchining muhitiga qo'yish. Faylni o'zgartirishning o'zi yetmaydi — eski token tarixda qoladi.
6. Ko'p uchraydigan xatolar
| Xabar / belgi | Sabab | Davosi |
|---|---|---|
| sozlama ishlamayapti | kuchliroq daraja ustidan yozgan | npm config ls — overridden by |
ECONNREFUSED faqat @scope/… da |
scope registri ishlamayapti | server/manzilni tekshiring |
E401 / E403 |
token yo'q yoki eskirgan | ${O'ZGARUVCHI} berilganmi |
EBADENGINE xato bo'ldi |
engine-strict=true |
Node versiyasini almashtiring |
| Belgi | Sabab | Davosi |
|---|---|---|
hamkasbda ^ tushyapti |
save-exact faqat ~/.npmrc da |
loyiha .npmrc ga |
| token Git tarixida | _authToken=npm_… ochiq |
token'ni bekor qiling, ${…} |
found 0 vulnerabilities yo'qoldi |
audit=false |
CI'da npm audit |
7. Mashqlar
Mashqlar kurs/mashqlar/16/12-npmrc/ da. Tajribalarda haqiqiy ~/.npmrc ga tegmaslik uchun foydalanuvchi faylini vaqtinchalik faylga yo'naltiring: NPM_CONFIG_USERCONFIG=./sinov-user.npmrc (Git Bash) — yoki faqat loyiha .npmrc bilan ishlang.
1-mashq (oson): Kim yutadi?
Loyiha .npmrc da save-exact=true va fund=false. Foydalanuvchi faylida save-exact=false va audit=false. Javob bering:
npm config get save-exact:npm config get audit:NPM_CONFIG_FUND=true npm config get fund:npm config get save-exact --save-exact=false:
Yechim
Loyiha foydalanuvchidan kuchli → save-exact=true. audit loyihada yo'q → foydalanuvchidan false. Muhit o'zgaruvchisi loyihadan kuchli → fund=true. Bayroq hammadan kuchli → false. npm config ls da ko'ring: kuchsizroq qiymatlar ; overridden by … izohi bilan.
2-mashq (o'rta): Jamoa .npmrc i
Yangi loyihaga .npmrc yozing: aniq versiyalar, engines majburiy, fund va audit xabarlarisiz. npm i picocolors bilan sinang, keyin engines.node ni >=26 qilib, npm install qiling.
Yechim
.npmrc:
save-exact=true
engine-strict=true
fund=false
audit=falsenpm i picocolors
npm pkg get dependencies
added 1 package in 1s
{
"picocolors": "1.1.1"
}npm pkg set engines.node=">=26" va npm install — npm error code EBADENGINE (chiqish kodi 1). audit=false tanladingizmi — CI'ga npm audit qadamini qo'shishni unutmang.
3-mashq (qiyin): Token qo'riqchisi
Commit'dan oldin .npmrc da ochiq token yo'qligini tekshiradigan skript yozing. npmrc.mjs da:
parseNpmrc(text)—Map(kalit → qiymat); bo'sh qatorlar va;/#izohlari tashlanadi;=dan oldingisi kalit.findLeaks(text)— kaliti_authToken,_authyoki_passwordbilan tugaydigan, lekin qiymati${KATTA_HARFLAR}ko'rinishida bo'lmagan kalitlar ro'yxati.
tekshir.mjs — node tekshir.mjs [.npmrc]; sizib chiqish bo'lsa chiqish kodi 1. npmrc.test.mjs — kamida 2 test. Token sifatida faqat npm_XXXX namunasidan foydalaning.
Ishoralar: split(/\r?\n/) — Windows qatorlari ham; endsWith — matnni qidirish; /^\$\{[A-Z0-9_]+\}$/ — $ va { ni \ bilan ekranlash (RegExp asoslari).
Yechim
npmrc.mjs:
// npmrc.mjs — .npmrc matnini o'qiydi va ochiq token'larni topadi
// "kalit=qiymat" qatorlari → Map; ; yoki # — izoh qatori
export function parseNpmrc(text) {
const map = new Map();
for (const raw of text.split(/\r?\n/)) {
const line = raw.trim();
if (line === "" || line.startsWith(";") || line.startsWith("#")) {
continue;
}
const eq = line.indexOf("=");
if (eq === -1) continue;
map.set(line.slice(0, eq).trim(), line.slice(eq + 1).trim());
}
return map;
}
const SECRET_KEYS = ["_authToken", "_auth", "_password"];
// Sir kalitlari ${ENV} o'rniga ochiq qiymat bilan yozilganmi?
export function findLeaks(text) {
const leaks = [];
for (const [key, value] of parseNpmrc(text)) {
const isSecret = SECRET_KEYS.some((s) => key.endsWith(s));
if (isSecret && !/^\$\{[A-Z0-9_]+\}$/.test(value)) {
leaks.push(key);
}
}
return leaks;
}
const text = "//r.example.com/:_authToken=npm_XXXX\nfund=false";
console.log(findLeaks(text)); // [ '//r.example.com/:_authToken' ]Oxirgi ikki qator — sinash uchun. indexOf("=") — birinchi =: qiymat ichida = bo'lsa ham (base64 token oxiridagi ==) to'g'ri bo'linadi.
tekshir.mjs:
// tekshir.mjs — ishlatish: node tekshir.mjs [.npmrc yo'li]
// commit'dan oldin: ochiq token bo'lsa, chiqish kodi 1
import { existsSync, readFileSync } from "node:fs";
import { findLeaks } from "./npmrc.mjs";
const file = process.argv[2] ?? ".npmrc";
if (!existsSync(file)) {
console.log(`✔ ${file} yo'q — tekshiradigan narsa yo'q`);
process.exit(0);
}
const leaks = findLeaks(readFileSync(file, "utf8"));
for (const key of leaks) {
console.log(`✖ ${key} — ochiq token, \${ENV} yozing`);
}
if (leaks.length === 0) console.log(`✔ ${file}: ochiq token yo'q`);
process.exitCode = leaks.length > 0 ? 1 : 0;npmrc.test.mjs:
// npmrc.test.mjs — node --test npmrc.test.mjs
import { test } from "node:test";
import assert from "node:assert/strict";
import { findLeaks, parseNpmrc } from "./npmrc.mjs";
const safe = [
"; «Bahor» loyihasi sozlamalari",
"save-exact=true",
"@bahor:registry=http://localhost:4873/",
"//localhost:4873/:_authToken=${BAHOR_NPM_TOKEN}",
].join("\n");
test("kalit va qiymatlar, izohlar tashlanadi", () => {
const map = parseNpmrc(safe);
assert.equal(map.size, 3);
assert.equal(map.get("save-exact"), "true");
assert.equal(
map.get("@bahor:registry"),
"http://localhost:4873/",
);
});
test("${ENV} — xavfsiz, ochiq token — sizib chiqish", () => {
assert.deepEqual(findLeaks(safe), []);
const leaky = safe + "\n//registry.npmjs.org/:_authToken=npm_XXXX";
assert.deepEqual(findLeaks(leaky), [
"//registry.npmjs.org/:_authToken",
]);
assert.deepEqual(findLeaks("# _authToken=npm_XXXX"), []);
});Ikki fayl bilan sinov:
node tekshir.mjs xavfsiz.npmrc
node tekshir.mjs ochiq.npmrc✔ xavfsiz.npmrc: ochiq token yo'q
✖ //registry.npmjs.org/:_authToken — ochiq token, ${ENV} yozingIkkinchisi 1 bilan tugaydi. Bu skriptni Git hook'lar darsida commit oldi tekshiruviga ulash mumkin. Professional asboblar (gitleaks, GitHub secret scanning) yuzlab token turlarini taniydi — lekin g'oya bir xil.
8. Real ishda
- Deyarli har jamoa loyihasida
.npmrcbor:save-exact,engine-strict, kompaniya scope registri. Begona repoda uni birinchi o'qiladigan fayllar qatoriga qo'shing (Begona repoda orientatsiya). - CI'da token — faqat sir sifatida (
NODE_AUTH_TOKEN,NPM_TOKEN),.npmrcda${…}havolasi.actions/setup-nodeningregistry-urlparametri shunday.npmrcni o'zi yaratadi. - Token sizib chiqsa — birinchi ish bekor qilish (revoke), keyin tarixni tozalash.
- Intervyu: "
.npmrcqayerlarda bo'ladi va qaysi biri yutadi?", "token'ni qanday saqlaysiz?", "dependency confusion nima va scope qanday himoya qiladi?".
Xulosa
.npmrc—kalit=qiymatsozlamalari; darajalar: loyiha, foydalanuvchi (~/.npmrc), global, builtin.- Ustuvorlik: bayroq →
NPM_CONFIG_*→ loyiha → foydalanuvchi → global → sukut;npm config ls—overridden by. - Jamoa sozlamalari (
save-exact,engine-strict,fund) — loyiha.npmrcda, Git'da. @scope:registry=…— scope uchun alohida registr; scope dependency confusion'dan himoya qiladi.- Token — faqat
${O'ZGARUVCHI};~/.npmrcdagi haqiqiy token'ni hech qachon ko'rsatmang va commit qilmang. - Verdaccio — o'z registringiz (sukut porti 4873).
Keyingi dars: pnpm: tez va qat'iy paket menejeri — global ombor va symlinklar bilan disk tejash, fantom bog'liqliklarni taqiqlash va vazifalar ni pnpm bilan o'rnatib o'lchash.
Manbalar
- npm Docs (v11): .npmrc, config, npm config
- npm Docs: Using private packages in a CI/CD workflow —
${NPM_TOKEN} - Verdaccio: verdaccio.org/docs (sukut porti 4873)
- Alex Birsan, "Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies" (2021-02-09), medium.com/@alex.birsan
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!