Powrót do strony głównej

Inspekcja Vue runtime: props i Pinia bez devtools

Artykuł opisuje tworzenie inspektora runtime dla aplikacji Vue w production. Obejmuje dostęp do props, Pinia store i Network bez devtools/proxy. Ewolucja od skryptu do iframe/extension z optymalizacją.

Vue inspektor: props, store i Network w prod bez proxy
Advertisement 728x90

Inspekcja aplikacji Vue w czasie działania: props, Pinia i zapytania sieciowe bez proxy

Vue przechowuje instancje komponentów w globalnym środowisku runtime. Skrypt znajduje główną instancję za pomocą document.querySelector i rekursywnie przeszukuje drzewo:

  • Props są dostępne jako component.props.
  • Zmiany są stosowane bezpośrednio, wyzwalając reaktywność.
  • Obsługa zagnieżdżonych komponentów bez naruszania działania strony.

Pierwsza wersja pozwalała na odczyt i modyfikację props w locie, usuwając ślepe zakresy między zapytaniami sieciowymi a DOM-em.

Integracja z Pinia: pełna kontrola nad stanem

Stan Pinii znajduje się w globalnym obiekcie _pStoresMap. Inspektor dodaje:

Google AdInline article slot
  • Odczyt i zapis store.state.
  • Wywoływanie getterów i akcji.
  • Bezpieczne interwencje bez ponownego ładowania strony.

To krytyczne dla mikrofrontendów: zmiany w stanie natychmiast odzwierciedlają się w UI, umożliwiając testowanie przypadków granicznych bez podmiany backendu.

Przykład dostępu do Pinii:

const piniaStores = window._pStoresMap;
const store = piniaStores.get('counter');
console.log(store.state);

Przejście do rozszerzenia przeglądarki i optymalizacja

Skrypty w konsoli miały ograniczenia: ręczny uruchomienie, błędy przy przeładowaniu. Rozszerzenie w okienku popup częściowo je rozwiązało, ale ujawniło nowe problemy:

Google AdInline article slot
  • Stała wielkość — nieprzyjemne przy strukturach JSON.
  • Wysokie obciążenie CPU przez ciągłe skanowanie.
  • Polityki korporacyjne blokujące instalację.

W wersji 2.0.0 pasek przeniesiono do iframe na stronie: pełne przestrzeń, niski narzut. Dodano tryb zakładki do uruchamiania bez instalacji — javascript:(function(){...})().

Przechwytywanie zapytań sieciowych w czasie działania

Narzędzia typu proxy (Charles, Fiddler) cierpią z powodu trudności w konfiguracji i problemów CORS w SPA. Wbudowany przechwytywacz sieciowy obsługuje fetch i XMLHttpRequest:

  • Punkty przerwania przed wysłaniem.
  • Edycja payloadu i danych formularza.
  • Mockowanie odpowiedzi.
  • Eksport do Postmana.

Zaimplementowano poprzez nadpisanie fetch i proxy XMLHttpRequest. Żadnych zewnętrznych certyfikatów — działa w kontekście strony.

Google AdInline article slot

Porównanie podejść:

| Narzędzie | Konfiguracja | Bezpieczeństwo CORS | Integracja w czasie działania |

|------------|--------|-----------|--------------------|

| Charles | Wysoka | Nie | Nie |

| Devtools | Brak | Tak | Tylko w trybie dev |

| Runtime-inspector | Niska | Tak | Pełna |

Optymalizacja dla środowiska produkcyjnego

Automatyczne skanowanie aktywuje się tylko w SPA z sygnaturami Vue (obecność Vue lub globalnych zmiennych Pinii). Filtry minimalizują obciążenie CPU:

  • Debounced ponowne skanowanie co 500ms.
  • Wybór fragmentów DOM.
  • Opóźnione wyliczanie getterów.

W środowisku produkcyjnym to niemal niewidoczne: <5% zużycia CPU w stanie bezczynności.

Co jest ważne

  • Dostęp bez budowania w trybie dev: Props, Pinia, Network w dowolnym środowisku.
  • Tryb zakładki: Obchodzenie ograniczeń korporacyjnych.
  • Interfejs w iframe: Skalowalność dla skomplikowanych struktur.
  • Mockowanie zapytań sieciowych: Zastępowanie proxy bez CORS.
  • Dla developerów średnich i seniorów: Techniki override, głębokie zrozumienie Pinii, hakerstwo w czasie działania.

Narzędzie zmniejszyło liczbę zgłoszeń do zespołu deweloperskiego o 70%, całkowicie zintegrowane z procesem QA.

— Editorial Team

Advertisement 728x90

Czytaj dalej