From 2cecacb6afd0beacd59f864e5fdd9398fe2196c5 Mon Sep 17 00:00:00 2001 From: Dexter Gramfors Date: Thu, 13 Apr 2017 00:56:17 +0200 Subject: [PATCH] #10 Add preload namespace that calls init-tracing! for use with the :preloads compiler option. --- README.md | 12 +++++++----- src/day8/re_frame/preload.cljs | 7 +++++++ 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 src/day8/re_frame/preload.cljs diff --git a/README.md b/README.md index 50631e4..2721d1b 100644 --- a/README.md +++ b/README.md @@ -14,21 +14,23 @@ re-frame has instrumentation to collect traces throughout various important poin ## Getting started -There are three requirements to use re-frame-trace: +There are two requirements to use re-frame-trace: -1. Compile your app with `:closure-defines`: "re_frame.trace.trace_enabled_QMARK_" true, e.g. +1. Compile your app with `:closure-defines: "re_frame.trace.trace_enabled_QMARK_" true` and `:preloads [day8.re-frame.preload]`, e.g. ```cljs {:builds [{:id "dev" :source-paths ["src" "dev"] :compiler {... - :closure-defines {"re_frame.trace.trace_enabled_QMARK_" true}}}]} + :closure-defines {"re_frame.trace.trace_enabled_QMARK_" true} + :preloads [day8.re-frame.preload]}}]} ``` By default, re-frame tracing is compiled out, so it won't impose a performance cost in production. The trade-off here is that you need to explicitly enable it in development. -2. In your app's startup method, call `day8.re-frame.trace/init-tracing!` to monkeypatch Reagent to add appropriate lifecycle hooks. Yes this is gross, and yes we will try and make a PR to reagent to add proper hooks, once we know exactly what we need. **N.B.:** because re-frame-trace is a development time only dependency, you may need to create two separate source folders, `dev` and `prod` to get isolation. The `dev` folder would contain an `init!` function in the `myapp.boot` namespace which calls `init-tracing!`, while the prod version of `init!` would be a no-op. It may be possible to use [preloads](https://github.com/clojure/clojurescript/wiki/Compiler-Options#preloads) in the future to remove this step entirely. -3. In your app's view code, add in `day8.re-frame.trace/devtools` as a sibling to the root application view. For example, if your app looks like this: + + The [preloads](https://github.com/clojure/clojurescript/wiki/Compiler-Options#preloads) option (`:preloads [day8.re-frame.preload]`) has to be set in order to automatically monkeypatch Reagent to add appropriate lifecycle hooks. Yes this is gross, and yes we will try and make a PR to reagent to add proper hooks, once we know exactly what we need. +2. In your app's view code, add in `day8.re-frame.trace/devtools` as a sibling to the root application view. For example, if your app looks like this: ```cljs (defn main [] diff --git a/src/day8/re_frame/preload.cljs b/src/day8/re_frame/preload.cljs new file mode 100644 index 0000000..4e56937 --- /dev/null +++ b/src/day8/re_frame/preload.cljs @@ -0,0 +1,7 @@ +(ns day8.re-frame.preload + (:require [day8.re-frame.trace :as trace])) + + +;; Use this namespace with the :preloads compiler option to perform the necessary setup for enabling tracing: +;; {:compiler {:preloads [day8.re-frame.preload] ...}} +(trace/init-tracing!)