Error JavaScript di lingkungan produksi sulit didebug karena kode telah diminifikasi dan kondisi perangkat, browser, serta jaringan setiap pengguna bersifat unik. Sebagian besar pendekatan pemantauan browser mengandalkan objek PerformanceTiming, yang hanya menangkap waktu pemuatan halaman lengkap dan tidak mencakup waktu pemuatan resource statis, sehingga menyulitkan identifikasi bottleneck performa. Browser Monitoring dalam Application Real-Time Monitoring Service (ARMS) menggabungkan dukungan source map dengan pelacakan ulang perilaku pengguna, memungkinkan Anda memetakan jejak stack yang diminifikasi kembali ke kode sumber asli dan memutar ulang tindakan pengguna yang memicu error tersebut.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Menginstal agen ARMS Browser Monitoring di aplikasi Anda. Untuk instruksi penyiapan, lihat Ikhtisar Browser Monitoring.
File source map yang dihasilkan oleh alat build Anda (lihat Membuat source map)
Cara kerja source map
Source map adalah file JSON yang memetakan posisi dalam kode yang diminifikasi kembali ke posisi yang sesuai dalam kode sumber asli. File ini menggunakan encoding VLQ untuk menyimpan data lokasi secara ringkas. Dengan source map, Browser Monitoring menerjemahkan error pada "Baris 1, Kolom 79585" menjadi file, baris, dan kolom yang tepat dalam kode sumber Anda.
Alur diagnosis
Alur berikut menjelaskan proses end-to-end: mengidentifikasi tren error, memetakan jejak stack yang diminifikasi ke kode sumber, lalu memutar ulang tindakan pengguna yang memicu error tersebut.
Langkah 1: Lihat ikhtisar error
Masuk ke Konsol ARMS.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Browser Monitoring, pilih wilayah di bilah navigasi atas dan klik nama aplikasi yang ingin Anda kelola.
Di panel navigasi sebelah kiri, klik JS Error Diagnosis.

Pada halaman ini:
Bagian Error Overview menampilkan jumlah total error, laju error JS, serta jumlah dan persentase pengguna yang terdampak.
Grafik kurva menunjukkan tren error dari waktu ke waktu.
Tab Frequent Errors mencantumkan error dengan frekuensi tinggi.
Tab Page Ranked by Error Rate dan Error View menampilkan distribusi error di berbagai halaman.
Langkah 2: Telusuri error tertentu
Tersedia dua titik masuk:
Di tab Frequent Errors, klik Diagnose di sebelah error yang dituju.
Pada grafik kurva, klik titik data pada waktu tertentu untuk membuka kotak dialog Exception Insight.
Contoh berikut menggunakan pendekatan grafik kurva:
Pada grafik kurva, identifikasi titik di mana laju error melonjak. Arahkan kursor ke titik infleksi hingga pointer berubah menjadi ikon tangan, lalu klik. Kotak dialog Exception Insight akan muncul. Untuk informasi lebih lanjut, lihat Lihat exception insight.

Klik tab Frequent Errors Top 5, pilih error, lalu klik Diagnose di kolom Operation. Tab Error Detail akan muncul.
Langkah 3: Tinjau detail error
Halaman detail error menyediakan konteks berikut:
| Field | Description |
|---|---|
| Waktu kemunculan pertama | Kapan error pertama kali tercatat |
| Versi saat kemunculan pertama | Versi aplikasi saat error pertama kali muncul (opsional) |
| Nama dan jenis error | Nama dan klasifikasi error JavaScript |
| Waktu kejadian | Kapan instans error ini terjadi |
| Perangkat, OS, browser | Lingkungan klien tempat error terjadi |
| Alamat IP, wilayah | Lokasi jaringan pengguna |
| Jenis koneksi | Koneksi jaringan (Wi-Fi, 4G, dan sebagainya) |
| URL error | URL halaman tempat error dipicu |
| Versi aplikasi | Versi aplikasi yang telah dideploy |
| File, baris, kolom | Posisi dalam file yang diminifikasi |
Contoh: Tangkapan layar berikut menunjukkan error dari modul peta pada dasbor waktu nyata. Modul tersebut melaporkan data tidak valid selama pembaruan, dan jejak stack mengarah ke Baris 1, Kolom 79585 dalam bundle yang diminifikasi.

"Baris 1, Kolom 79585" tidak dapat ditindaklanjuti karena kode produksi telah diminifikasi. Langkah berikutnya memetakan posisi ini kembali ke kode sumber Anda.
Langkah 4: Petakan error ke kode sumber
Nomor baris dan kolom dalam jejak stack mengarah ke kode yang diminifikasi, bukan file sumber Anda. Terapkan source map untuk menentukan lokasi error asli.
Di bagian Stack Info, klik ikon
di sebelah kiri frame stack untuk memperluasnya, lalu klik Choose Sourcemap.Pada kotak dialog Sourcemap File, pilih file source map yang sudah ada atau unggah yang baru, lalu klik OK.
CatatanAnda dapat mengunggah hingga lima file sekaligus.

Setelah menerapkan source map, Browser Monitoring menyorot lokasi error asli dengan warna merah di bagian Source Code, menampilkan file dan baris tepat tempat error terjadi. Terapkan source map ke setiap frame dalam stack error untuk melacak rantai panggilan lengkap.
Langkah 5: Reproduksi error dengan pelacakan ulang perilaku pengguna
Pemetaan source map mengungkapkan *di mana* error terjadi, tetapi tidak selalu *mengapa*. Pada contoh modul peta, pemetaan kode sumber menunjukkan bahwa data tidak valid menyebabkan error selama pembuatan komponen. Namun, kode sumber tersebut sudah mencakup pemeriksaan null dan toleransi kesalahan untuk data ini. Untuk memahami mengapa data tidak valid muncul, tinjau apa yang terjadi tepat sebelum error tersebut.
Browser Monitoring mencatat perilaku pengguna sebagai jejak kronologis node event:
Pemuatan halaman
Perubahan rute
Klik halaman
Permintaan API
Output konsol
Tinjau jejak ini untuk memutar ulang rangkaian tindakan yang menyebabkan error.
Contoh: Jejak perilaku pengguna berikut menunjukkan bahwa permintaan API terjadi tepat sebelum error. Panggilan API tersebut meminta pembaruan waktu nyata untuk modul peta, tetapi respons yang dikembalikan adalah ConsoleNeedLogin alih-alih data peta yang valid. Hal ini menunjukkan bahwa pengguna telah logout dari halaman—penyebab utama data tidak valid tersebut.

Menghasilkan source map
Source map diperlukan untuk Langkah 4 dalam alur diagnosis. Hasilkan source map menggunakan tool build Anda, lalu unggah ke Konsol ARMS.
Untuk mengunggah file source map, temukan aplikasi Anda di halaman Browser Monitoring, lalu pilih More > Settings di kolom Actions. Di halaman pengaturan, klik tab Advance.
Webpack
Dalam webpack.config.js, atur properti devtool menjadi "source-map". Webpack mendukung 13 nilai devtool untuk berbagai jenis source map. "source-map" menghasilkan file .map terpisah yang lengkap, yang direkomendasikan untuk diagnosis error di lingkungan produksi.
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
devtool: "source-map"
};Gulp
Gunakan paket gulp-sourcemaps:
var gulp = require('gulp');
var sourcemaps = require('gulp-sourcemaps');
gulp.task('javascript', function() {
gulp.src('src/**/*.js')
.pipe(sourcemaps.init())
.pipe(sourcemaps.write('../sourcemaps'))
.pipe(gulp.dest('dist'));
});Grunt
Hanya dengan grunt-contrib-uglify:
grunt.initConfig({
uglify: {
options: {
sourceMap: true
}
}
});Dengan grunt-usemin (yang memanggil grunt-contrib-concat dan grunt-contrib-uglify):
grunt.initConfig({
concat: {
options: {
sourceMap: true
}
},
uglify: {
options: {
sourceMap: true,
sourceMapIn: function(uglifySource) {
return uglifySource + '.map';
},
}
}
});Dengan grunt-jsmin-sourcemap:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-jsmin-sourcemap');
grunt.initConfig({
'jsmin-sourcemap': {
all: {
src: ['scripts/script.js'],
dest: 'scripts/script.jsmin-grunt.js',
destMap: 'scripts/script.jsmin-grunt.js.map'
}
}
});
grunt.registerTask('default', 'jsmin-sourcemap');
};Angular CLI
ng build --prod --source-map --vendor-source-mapUglifyJS2
UglifyJS2 adalah tool CLI. Untuk opsi lainnya, lihat Opsi source map CLI.
uglifyjs app.js -o app.min.js --source-map app.min.js.mapSystemJS
Gunakan SystemJS Builder:
builder.bundle('app.js', 'app-outfile.js', {
minify: true,
sourceMaps: true
});