Lokal kompyuterda mukammal ishlagan ilova production serverga chiqgandan so'ng darhol crash bo'ldi. Kod o'zgarmagan, konfiguratsiya to'g'ri — lekin muhit farqi hamma narsani buzdi.
Developer web3 ilovasini production serverga chiqardi. Lokal kompyuterda hamma narsa mukammal ishlagan edi: tranzaksiyalar o'tdi, wallet ulandi, hisob-kitoblar to'g'ri chiqdi.
Lekin production'da ilova sahifa ochilishi bilanoq crash bo'ldi. Konsol bitta xato ko'rsatdi:
Kod o'zgarmagan. Konfiguratsiya to'g'ri. Server ishlayapti. Lekin ilova ishlamayapti. Bu — muhit farqidan kelib chiqqan yashirin xato.
React ilovasi build qilinayotganda browserslist degan konfiguratsiya qaysi brauzerlarni qo'llab-quvvatlash kerakligini belgilaydi. Babel va boshqa toollar shu konfiguratsiyaga qarab kodni o'zgartirib beradi.
Muammo shundaki, development va production muhitlari uchun turli brauzerlar maqsad qilib olindi:
Faqat oxirgi Chrome/Firefox versiyasi. Bu brauzerlar BigInt'ni to'liq biladi — hech qanday o'zgartirish kerak emas.
Default konfiguratsiya — eski brauzerlar ham hisobga olingan. Ular BigInt'ni tushunmaydi, Babel esa uni o'zgartira olmaydi.
Bu server xatosi emas — bu brauzer konsolida paydo bo'lgan JavaScript runtime xatosi:
npm run build && servepackage.json faylida browserslist yangilandi — production uchun BigInt'ni qo'llaydigan brauzerlar ko'rsatildi:
Shundan so'ng production build ham to'g'ri ishladi. supports bigint filtri faqat BigInt'ni qo'llaydigan brauzerlarga mo'ljallangan build yaratadi.
Har doim ikkita narsani tekshiring: 1) Test qilgan muhitingiz production bilan bir xilmi? 2) Yangi texnologiya yoki tip ishlatilgan bo'lsa, brauzer mosligini tekshirdingmi? "Lokal ishlaydi" — bu hali tayyor degani emas. Production build'ni lokal sinab ko'rish — har bir release'dan oldin majburiy qadam.