پرش به مطلب اصلی

سورس‌مپ و نسخه‌ها

بدون سورس‌مپ، ردپای خطای مرورگر چیزی شبیه app.4f2c.js:1:28461 است. با سورس‌مپ می‌شود src/checkout/pay.ts:88، همراه با خطوط اطراف.

ارورا پیش از گروه‌بندی نمادگشایی می‌کند، پس خطاها روی فریم‌های اصلی و پایدار گروه می‌شوند نه روی هش باندلی که هر بار استقرار عوض می‌شود.

۱. تولید سورس‌مپ​

// vite.config.ts
export default defineConfig({ build: { sourcemap: true } });
// webpack.config.js
module.exports = { devtool: "source-map" };

در Next.js: productionBrowserSourceMaps: true در next.config.js.

۲. تعیین نسخه در SDK​

رشتهٔ نسخه، کلیدی است که همه‌چیز زیر آن بایگانی می‌شود و باید دقیقاً میان SDK و بارگذاری یکسان باشد.

Sentry.init({
dsn: "…",
release: "web@1.4.2", // همان رشته‌ای که پایین بارگذاری می‌شود
dist: "prod", // اختیاری، برای پلتفرم‌هایی که چند توزیع می‌سازند
});

۳. بارگذاری فایل‌ها از CI​

for map in dist/assets/*.js.map; do
curl -sf -X POST "$ERRORA/api/v1/projects/$PROJECT_ID/release-files" \
-H "Authorization: Bearer $ERRORA_TOKEN" \
-F "release=web@1.4.2" \
-F "name=~/assets/$(basename "${map%.map}")" \
-F "sourcemap=1" \
-F "file=@$map"
done
فیلدمعنی
releaseاجباری. باید برابر release در SDK باشد.
nameاجباری. مسیر آدرس فایل. ~/ یعنی «هر میزبانی» که معمولاً همان چیزی است که می‌خواهید.
distبرچسب توزیع اختیاری؛ باید با dist در SDK یکی باشد.
sourcemapمشخص می‌کند این بارگذاری نقشه است نه باندل.
fileخود فایل، به شکل multipart/form-data.

بارگذاری دوبارهٔ همان سه‌تایی (release, dist, name) جایگزین قبلی می‌شود، پس اجرای دوبارهٔ استقرار بی‌خطر است.

برای CI از توکن دسترسی شخصی استفاده کنید — هرگز از توکن نشست یک کاربر.

نمونهٔ GitLab CI​

upload-sourcemaps:
stage: deploy
script:
- npm run build
- |
for map in dist/assets/*.js.map; do
curl -sf -X POST "$ERRORA/api/v1/projects/$PROJECT_ID/release-files" \
-H "Authorization: Bearer $ERRORA_TOKEN" \
-F "release=web@$CI_COMMIT_SHORT_SHA" \
-F "name=~/assets/$(basename "${map%.map}")" \
-F "sourcemap=1" -F "file=@$map"
done

…و در Sentry.init هم release: \web@$`` بگذارید.

۴. بررسی​

در بیلد مستقرشده خطایی ایجاد کنید و صفحهٔ خطا را باز کنید. فریم‌ها باید فایل، خط، ستون و کد اصلی شما را نشان دهند. فهرست فایل‌های بارگذاری‌شده اینجاست:

GET /api/v1/projects/{project_id}/release-files?release=web@1.4.2&dist=
POST /api/v1/projects/{project_id}/release-files
GET /api/v1/projects/{project_id}/release-files/{id}
DELETE /api/v1/projects/{project_id}/release-files/{id}

چطور کار می‌کند​

ارورا برای هر فریم مینیفای‌شده، فایل مربوطه را با نام پیدا می‌کند، از روی نقشه به فایل، خط و ستون اصلی می‌رسد و اگر نقشه sourcesContent داشته باشد، خطوط کد اطراف را هم پیوست می‌کند. sourcesContent را در نقشه‌هایتان نگه دارید: بدون آن نام فایل و شماره خط درست را دارید، اما متن کد را نه.

آیا نقشه‌ها باید عمومی باشند؟​

نه. آن‌ها را به ارورا بفرستید و فایل‌های .map را روی وب‌سرور خود منتشر نکنید (یا پشت احراز هویت بگذارید). ارورا آن‌ها را سمت سرور می‌خواند؛ کاربران شما هیچ‌وقت به آن‌ها نیاز ندارند.

عیب‌یابی​

نشانهعلت / راه‌حل
فریم‌ها هنوز مینیفای‌اندناهماهنگی release میان SDK و بارگذاری — شایع‌ترین علت
فایل درست است ولی کد نشان داده نمی‌شودنقشه sourcesContent ندارد
بعضی فریم‌ها حل می‌شوند و بعضی نهفقط بخشی از باندل‌ها بارگذاری شده‌اند؛ روی همهٔ نقشه‌ها از جمله چانک‌های vendor حلقه بزنید
شماره خط‌ها اشتباه استنقشهٔ بارگذاری‌شده مربوط به بیلد دیگری است — از همان جاب CI که بیلد را ساخته بارگذاری کنید
پاسخ 401 هنگام بارگذاریتوکن ارسال نشده یا به آن پروژه دسترسی ندارد