Fork me on GitHub
#clojurescript
<
2022-10-12
>
FlavaDave17:10:58

Hey all, I’m trying to make a PWA in cljs with shadow-cljs. my shadow-cljs.clj is :

{:nrepl {:port 7002}
 :builds
        {:app
               {:target     :browser
                :output-dir "target/cljsbuild/public/js"
                :asset-path "/js"
                :modules    {:app {:entries []}}
                :devtools   {:watch-dir "resources/public"
                             :preloads  [re-frisk.preload]}
                :dev        {:closure-defines {"re_frame.trace.trace_enabled_QMARK_" true}}
                :release    {}}

         :sw {:target :browser
              :output-dir "resources/public/"
              :asset-path "/"
              :modules {:sw {:init-fn sw.core/init
                                 :entries [sw.core]}}
              :compiler-options {:optimizations :advanced}}
         :test {:target  :node-test, :output-to "target/test/test.js"
                :autorun true}}
 :lein  {:profile "+dev"}}
my pwa.core/init is:
(defn init! []
  (set! (.-onload js/window)
        (fn []
          (when-let [service-worker (.-serviceWorker js/navigator)]
            (-> service-worker
                (.register "./sw.js")
                (.then #(js/console.log "Service worker registered!"))))))
  (start-router!)
  (ajax/load-interceptors!)
  (mount-components))
and my sw.core namespace looks like :
(ns sw.core)

(.addEventListener
 js/self "install"
 (fn [event]
   (js/console.log "Service worker installed!" event)))

(.addEventListener
 js/self "activate"
 (fn [event]
   (js/console.log "Service worker active!" event)))

(.addEventListener
 js/self "fetch"
 (fn [event]
   (js/console.log "Fetch!" event))

(defn init
  []
  (js/console.log "Service worker initialized"))
everything builds just fine but I get
Uncaught (in promise) TypeError: Failed to register a ServiceWorker for scope ('') with script (''): ServiceWorker script evaluation failed
Any idea what I’m doing wrong?

djblue01:10:23

sw.core seems to be missing a closing ) for the third event handler, so my guess is that the build is failing

djblue01:10:41

Also, I think the pwa.core/init should be http://pwa.app/init

thheller17:10:20

service workers only work in https IIRC

FlavaDave17:10:17

Localhost is an exception. And I have gotten similar code to work by writing JS manually.