Тут мы уронили прод в четверг. И уронили прямо сурово: у всех из нас всё работает, воспроизвести фиг знает как, но пользователи жалуются, что нифига не работает. Просто белый экран в браузере.
Не особо интересно и переиспользуемо как мы раскапывали эту проблему: нам повезло, что один из несчастливчиков был на короткой ноге с нами и дал содержимое своего localStorage.
Проблема же оказалась в том, что у нас не настроены политики по работе с внешними ресурсами - каждый мог читать и писать как ему вздумается. В итоге в одном месте правила хранения изменили. А в другом - нет. И это другое место рушило страницу.
Ретро простое:
1. нужно запилить пакет, который управляет всеми внешними хранилищами браузера(localstorage, sessionstorage, cookies, webstorage, etc) и сам делает все операции.
На созвоне выяснили, что необходимо инструменту поддерживать:
- миграции
- версионирование
- серилизацию/десерилизацию
2. Нужно запилить eslint плагин, который будет бить по рукам в случае прямого обращения в localstorage и прочим апишкам.
Так же я решил поискать как это сделано у других: и результат - никак. Ни next, ни nuxt, ни другие либы чот не дают нормального способа управлять хранилищами. Даже скопировать негде.
Внезапно, инфа нашлась только на https://v1000.reatom.dev/handbook/persist/#localstorage--sessionstorage. Советую ознакомиться. Не для того чтобы переходить на reatom, а для того, чтобы просто скопировать к себе публичный апи и сгенерить по его описанию библиотеку для своего проекта. Потому что там просто уже опробованы и реализованы, наверное, все фичи, которые могут понадобиться этому слою.
Post #336
1.92K