Bosh sahifa Wiki Source map

Source map

Source map — transformatsiya qilingan koddagi pozitsiyalarni uning asl source fayli, satri, ustuni va ba’zan symbol nomiga bog‘laydigan metadata faylidir. Minification, bundling, transpilation yoki compilation natijasidagi JavaScript va boshqa kodni debugging qilishda brauzer hamda error monitoring stack trace’ni dasturchi yozgan source ko‘rinishiga qaytaradi.

Mapping tuzilishi

Generated fayl oxiridagi comment source map URLni ko‘rsatishi yoki map alohida tizimga yuklanishi mumkin. Map generated positionlar, original source path, name va optional source contentni saqlaydi. Mapping ko‘pincha ixcham segment encodingda yoziladi.

Bitta generated satr bir nechta original file fragmentidan tuzilishi mumkin. Bundler har transform bosqichidagi maplarni chain qilib yakuniy mapping hosil qiladi. Oraliq plugin noto‘g‘ri map chiqarsa final stack trace ham siljiydi.

Debugging

Brauzer DevTools source mapni o‘qib breakpointni original TypeScript yoki unminified modulda qo‘yishga imkon beradi. Runtime aslida generated kodni bajaradi; debugger mapping orqali mos instruction pozitsiyasini topadi. Optimizer ayrim variable yoki code’ni olib tashlasa barcha original qatorga aniq bajariladigan joy topilmasligi mumkin.

Error monitoring service minified stack frame’dagi file, line va columnni release’ga tegishli map bilan symbolicate qiladi. To‘g‘ri version yoki artefakt digest bilan bog‘lanmagan map boshqa release’dan olinib, noto‘g‘ri qatorni ko‘rsatadi.

Deploy modeli

Public source map browser debuggingni osonlashtiradi, lekin original source va pathlarni foydalanuvchiga ochishi mumkin. Private modelda production bundle map URL bermaydi; map release pipeline orqali faqat error monitoring xizmatiga yuklanadi. Service access control va retention bilan himoyalanadi.

sourcesContent original source matnini map ichiga to‘liq joylashi mumkin. Uni olib tashlash hajm va disclosure’ni kamaytiradi, ammo symbolication service original repository snapshotiga kirishi kerak. Tanlov threat model va operatsion ehtiyojga bog‘liq.

Xavfsizlik

Source map secretni xavfsiz yashirish vositasi emas. Secret source’da bo‘lmasligi va frontend bundlega umuman kirmasligi kerak. Mapni yopish business logicni qisman yashiradi, lekin browserga yuborilgan generated code tahlil qilinishi mumkin.

Original path developer username yoki internal directoryni oshkor qilishi mumkin. Build path normalization buni va reproducibility farqini kamaytiradi. Map parser ishonchsiz katta input, path traversal va chuqur mappingga limit qo‘llaydi.

Sifat va test

Pipeline representative xatoni generated kodda ishga tushirib, stack trace original expected qatorga qaytishini tekshirishi mumkin. Release ID, bundle hash va map bir atomik publish jarayonida bog‘lanadi. Bundle deploy bo‘lib, map upload muvaffaqiyatsiz bo‘lsa health signal chiqariladi.

Source map build artefakt hisoblanadi va source bilan versionlanadi. U public paketga kiritiladimi, alohida archive’da saqlanadimi yoki retentiondan keyin o‘chiriladimi release siyosatida belgilanadi.

Multi-stage transform

TypeScript compiler, framework plugin va minifier ketma-ket ishlasa har bosqich oldingi mapni consume qilib yangi map chiqaradi. Zanjirdagi bitta vosita line offsetni yo‘qotsa, yakuniy browser faqat oxirgi noto‘g‘ri mappingni ko‘radi. Plugin compatibility test shuning uchun zarur.

Code splitting har chunk uchun alohida map yaratadi. Runtime error chunk hash bilan kelganda monitoring aynan shu immutable faylga mos mapni topadi. CDN alias yoki source filename yetarli key emas. Dynamic eval yoki inline script uchun mapping qo‘shimcha cheklovga ega bo‘lishi mumkin. Source map nomlari stack trace’ni yaxshilasa ham optimizer olib tashlagan lokal qiymatni tiklay olmaydi; debugging imkoniyati generated code semantikasidan oshmaydi.

Bog‘liq tushunchalar

Minification, Transpiler, Bundler, Stack trace, Debugging, Symbolication, JavaScript