Saat melacak error JavaScript (JS) di frontend, jejak stack digunakan untuk mengidentifikasi lokasi error tersebut. Real User Monitoring (RUM) mengumpulkan jejak stack error JS dan menguraikannya menggunakan file source map yang diunggah. Namun, karena RUM mendukung pengelolaan beberapa versi file source map, seringkali sulit mengaitkan secara akurat file JS dalam jejak stack exception dengan file source map-nya hanya berdasarkan nama file saja. Dengan menggunakan plugin build tool RUM, Anda dapat menyisipkan UUID ke dalam file JS terbundel dan file source map untuk membuat tautan dua arah. Hal ini memungkinkan RUM mengurai dan menampilkan jejak stack secara otomatis saat Anda membuka halaman detail exception, tanpa perlu memilih file source map secara manual.
Prasyarat
Sebelum menggunakan plugin, lengkapi persiapan berikut:
Anda telah membuat ruang kerja dan aplikasi RUM Web atau H5 di Cloud Monitor 2.0, serta memperoleh
workspacedanserviceId. Untuk petunjuknya, lihat Integrasikan aplikasi web atau H5.Lingkungan build Anda menggunakan Node.js 20 LTS atau Node.js 22 ke atas.
Anda telah memperoleh ID AccessKey dan Rahasia AccessKey. Akun tersebut harus memiliki izin CMS. Berikut contoh kebijakan izin minimum:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cms:GetRumSymbolFileParams", "Resource": "*" } ] }
Gunakan plugin build tool RUM
Webpack
Instal paket npm plugin build tool RUM untuk Webpack.
npm install -D @arms/rum-webpack-pluginIntegrasikan dan konfigurasikan plugin Webpack.
Untuk build produksi, gunakan
hidden-source-mapagar URL source map tidak terekspos di output JavaScript.const { rumWebpackPlugin } = require('@arms/rum-webpack-plugin'); module.exports = { mode: 'production', devtool: 'hidden-source-map', plugins: [ rumWebpackPlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], };Webpack melewatkan pemrosesan dan pengunggahan source map ketika
mode === 'development'atauNODE_ENV === 'development'. Gunakan build non-development untuk mengunggah source map produksi.
Vite
Instal paket npm plugin build tool RUM untuk Vite.
npm install -D @arms/rum-vite-pluginIntegrasikan dan konfigurasikan plugin Vite.
import { defineConfig } from 'vite'; import { rumVitePlugin } from '@arms/rum-vite-plugin'; export default defineConfig({ build: { sourcemap: true, }, plugins: [ rumVitePlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], });build.sourcemapdapat diatur ketrueatau'hidden'. Jangan atur ke'inline'.
Referensi konfigurasi
Bidang | Wajib untuk unggah otomatis | Bawaan | Deskripsi |
| Ya | Tidak ada | Nama ruang kerja Cloud Monitor 2.0. |
| Ya | Tidak ada | ID Layanan aplikasi RUM. |
| Ya | Tidak ada bawaan | Versi rilis aplikasi, digunakan untuk mengisolasi source map dari berbagai build. Gunakan versi rilis atau nomor build aktual Anda. |
| Ya | Tidak ada bawaan | Wilayah layanan RUM. |
| Ya | Tidak ada | ID AccessKey untuk memanggil OpenAPI kebijakan unggah. |
| Ya | Tidak ada | Rahasia AccessKey untuk memanggil OpenAPI kebijakan unggah. |
| Tidak | Tidak ada | Token Security Token Service (STS) yang diteruskan saat menggunakan kredensial temporary STS. |
| Tidak |
| Menghapus file lokal |
Verifikasi penyisipan
Periksa file source map
Jika clearSourceMap: false, buka file .map di direktori output build. Kehadiran debugId yang diformat dengan benar di tingkat atas menandakan bahwa penyisipan berhasil. Contoh:
{
"version": 3,
"file": "index.js",
"sources": ["webpack://app/src/index.ts"],
"sourcesContent": ["throw new Error('test');"],
"mappings": "AAAA",
"debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}sourcesContent harus ada dan tidak kosong. Jika tidak ada atau kosong, RUM mungkin hanya dapat memulihkan lokasi file dan tidak bisa menampilkan konteks kode sumber.
Periksa waktu proses browser
Buka halaman yang telah dideploy dan jalankan perintah berikut di konsol browser:
window._armsRumDebugIds;Jika objek yang dikembalikan berisi pemetaan UUID, berarti file JavaScript pada halaman saat ini telah mendaftarkan debugId. Plugin juga mendaftarkan debugId di globalThis, self, global, document.defaultView, serta window induk/atas yang dapat diakses, untuk mendukung skenario iframe dan micro-frontend.
Periksa hasil unggah
Di halaman File Management aplikasi RUM Anda, pastikan bahwa:
File source map telah muncul.
Versi file sesuai dengan
versionyang dikonfigurasi di plugin.UUID sesuai dengan
debugIddi output build.
Pertanyaan Umum
Log build melaporkan bahwa file source map tidak ditemukan
Periksa apakah build tool Anda menghasilkan file .map terpisah. Jangan gunakan source map inline atau eval, dan pastikan nama file serta path file JavaScript dan file .map tidak diubah oleh skrip post-processing.
Unggah berhasil tetapi halaman detail exception tidak menampilkan kode sumber
Periksa secara berurutan:
Apakah file
.mapberisisourcesContentyang tidak kosong?Apakah
debugIddalam source map sesuai dengan UUID yang dilaporkan dalam jejak stack exception?Apakah
workspace,serviceId,version, danregionsesuai dengan aplikasi RUM target Anda?Apakah file yang diunggah muncul di halaman File Management aplikasi target?
Webpack tidak mengunggah file
Pastikan bahwa baik mode maupun NODE_ENV tidak diatur ke development, dan verifikasi bahwa file source map eksternal sedang dihasilkan.
Bisakah saya menggunakan bucket OSS kustom?
Tidak. Titik akhir unggah dan parameter form dikembalikan oleh OpenAPI. Plugin tidak mengekspos konfigurasi bucket.
Bagaimana cara mencegah source map dipublikasikan ke internet publik?
Untuk Webpack, gunakan hidden-source-map. Atur juga clearSourceMap: true. Plugin akan menghapus file lokal .map yang sesuai setelah setiap unggah berhasil.
Saya melihat error bahwa versi Node.js saat ini tidak mendukung fitur tertentu
Upgrade lingkungan build Anda ke Node.js 20 LTS atau Node.js 22 ke atas. Dependensi yang digunakan oleh plugin Vite tidak mendukung Node.js 18 atau 21.
Ukuran file source map melebihi batas
Satu file source map tidak boleh melebihi 50 MiB. Anda dapat mengurangi ukuran file melalui code splitting, mengurangi konten source inline, atau menyesuaikan konfigurasi build Anda. Pastikan Anda tetap menyimpan cukup sourcesContent untuk menampilkan konteks kode sumber.
Pencocokan otomatis source map gagal ketika URL chunk berisi tanda kurung
Ketika URL chunk webpack berisi karakter khusus seperti tanda kurung — misalnya format route group yang digunakan oleh Next.js App Router (/app/(groupName)/page/) — ARMS tidak dapat mengurai UUID dengan benar dari bidang binary_images dalam error JS yang dilaporkan. Akibatnya, pencocokan otomatis source map gagal. URL chunk tanpa tanda kurung dalam exception yang sama diurai secara normal.
Ini merupakan keterbatasan penguraian ARMS yang sudah diketahui. Untuk menghindari masalah ini, konfigurasikan webpack agar tidak menyertakan tanda kurung dalam penamaan path chunk. Misalnya, ubah nama direktori route group Next.js agar tidak menggunakan format (groupName).
Catatan rilis
Kami merekomendasikan pengguna baru atau pengguna yang melakukan upgrade untuk menggunakan versi terbaru 1.1.0. Versi 0.0.x menggunakan pipeline unggah lama dan tidak lagi direkomendasikan.
Versi | Status | Deskripsi |
| Saat ini direkomendasikan | Memerlukan pengiriman eksplisit objek konfigurasi plugin. |
| Direkomendasikan untuk upgrade | Beralih ke pipeline unggah CMS menggunakan API |
| Tidak direkomendasikan | Menggunakan pipeline unggah lama. Memperluas cakupan pendaftaran |
| Tidak direkomendasikan | Menggunakan pipeline unggah lama. Menambahkan dukungan pemilihan wilayah dan token STS. |
| Tidak direkomendasikan | Menggunakan pipeline unggah lama. Menambahkan unggah otomatis source map setelah build proyek. |
| Tidak direkomendasikan | Menggunakan pipeline unggah lama. Menambahkan dukungan Webpack dan Vite. Menyisipkan UUID untuk membuat tautan dua arah antara file JavaScript dan file source map-nya. |
Saat melakukan upgrade dari 0.0.x ke 1.1.0:
Anda harus mengirimkan objek konfigurasi secara eksplisit ke plugin Webpack atau Vite dan mengonfigurasi semua bidang wajib.
Jika konfigurasi Anda sebelumnya menggunakan
pid, gantilah denganserviceId.Konfigurasikan secara eksplisit
versiondanregion. Plugin tidak lagi menyediakan nilai bawaan.Setelah upgrade dari
0.0.x, pipeline unggah OpenAPI CMS akan digunakan. Konfigurasikanworkspace,serviceId, dan autentikasi AccessKey seperti yang dijelaskan dalam dokumen ini.