Protokolování čitelných chyb ClojureScript (.cljs) do hlídky!!

Nedávno jsem měl to potěšení nastavit front-end hlášení chyb pro webovou aplikaci na ona.io. Udělal jsem to takto:

Krok 1 :Nainstalujte sadu SDK sentry browseru a přidejte komponentu hranice chyb následovně:

  • V níže uvedeném příkladu je použití nového rámce
(ns your.namespace
  (:require ["@sentry/browser" :as Sentry]
            ["@sentry/tracing" :refer (Integrations)]))

(defn error-boundary
  [comp]
  (let [error (r/atom nil)]
    (r/create-class
      {:component-did-catch
         (fn [_this e _info]
           (let [{:keys [sentry-dsn app-version env]}
                   @(re-frame/subscribe [::your-configuration-sub])]
             (.init Sentry
                    #js
                     {:environment env,
                      :dsn sentry-dsn,
                      :release app-version,
                      :integrations #js [(new (.-BrowserTracing Integrations))],
                      :tracesSampleRate 1.0})
             (.captureException Sentry e))),
       :get-derived-state-from-error (fn [e] (reset! error e) #js {}),
       :reagent-render (fn [comp]
                         (if @error
                           [:div.fallback-error-ui
                            [:p.no-saved-charts-message.alert-danger
                             [:span.tooltip [:span.tip-info "Reload page"]
                              [:i.fa.fa-refresh
                               {:aria-hidden true,
                                :on-click (click-fn #(.reload (.-location
                                                                js/window)))}]]
                             "An error

Krok 2 :Zdrojové mapy!

2.1 Proč je potřebujeme?

Clojurescript je kompilátor pro Clojure, který cílí na JavaScript.

ClojureScript se zkompiluje do JS, který je poté minifikován a načten v prohlížeči. zdrojové mapy udržují kód na straně klienta čitelný a co je důležitější, laditelný i poté, co jej zkombinujete a minifikujete, aniž by to ovlivnilo výkon

2.2 Jak je generujete?

To závisí na tom, jak kompilujete svůj ClojureScript. Pokud používáte shadow-cljs, podobně jako já, je tento proces jednoduchý

Použijte následující konfigurace shadow-cljs (zkrácené):

...
:release
         {:build-options
            {:ns-aliases {day8.re-frame.tracing day8.re-frame.tracing-stubs}},
          :compiler-options {:source-map true}},
...

2.3 k čemu je potřebujete?

Pokud pro hlášení chyb používáte hlídku, hlídka poskytuje funkce, které budou používat vaše zdrojové mapy k tomu, aby pro vás byly chybové zprávy jasnější

Chcete-li nahrát zdrojové mapy na hlídku, postupujte takto:

Vytvořte propuštění hlídky
příklad příkazu bash

sentry-cli releases new <release-name>

Ujistěte se, že sourceMappingURL je správně nastaveno
Ze své osobní zkušenosti jsem si všiml, že někdy i po nahrání zdrojových map na hlídku nemusí vaše chybové zprávy vypadat správně. Problém může být způsoben sourceMappingURL hodnotu ve vašem vygenerovaném .js soubory.
tak jsem to opravil pomocí sed :-)

# ensure sourceMappingURL is set correctly
sed -i "s/sourceMappingURL=/sourceMappingURL=$1:\/\/$2\/js\/path\/to\/your\//g" -r resources/public/js/path/to/your/*.js

Nakonec pošlete své zdrojové mapy hlídce

sentry-cli --url https://sentry.io releases --org <org-name> --project <project-name>  files <release-name> upload-sourcemaps resources/public/js/<path to your JS files>/ --url-prefix <protocol>://<your server domain>/js/<path to your JS files>/

Dokončete uvolnění

sentry-cli releases finalize <release name>

Výsledek

Zde je návod, jak může vaše trasování zásobníku vypadat na hlídce