Every time I try to run lein cljsbuild once
I get an error:
Could not write JavaScript nil
Any thoughts or ideas would be appreciated as I have been stuck on this for a while and unfortunately cannot go any further.
Here is what I have been doing.
lein new app finance
project.clj
file with dependencies, cljsbuild, plugin and main spec(see below) lein deps
and this works. lein run
and that also works, spitting out 'Hello World' in the console. Try to run lein cljsbuild once
and then I get this error that Could not write JavaScript nil
(defproject finance "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:plugins [[lein-cljsbuild "1.1.7"]]
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/clojurescript "1.10.238"]
[reagent "0.8.0-alpha2"]]
:main ^:skip-aot finance.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}}
:cljsbuild {
:builds [{
:source-paths ["src"]
:compiler {
:output-to "resources/public/javascripts/dev.js"
:output-dir "resources/public/javascripts/cljs-dev"
:optimizations :none
:pretty-print true}}]})
Start over in a new directory. Your error was using app
instead of figwheel
in creating the project:
> lein new figwheel fred
> cd fred
> lein cljsbuild once ; => works fine
> lein figwheel ; => starts interactive browser repl
Normally you would just use figwheel
, but cljsbuild once
also works.
Your project.clj now looks like the following. Note in particular the :plugins
section you were missing:
(defproject fred "0.1.0-SNAPSHOT"
:min-lein-version "2.7.1"
:dependencies [[org.clojure/clojure "1.9.0"]
[org.clojure/clojurescript "1.9.946"]
[org.clojure/core.async "0.4.474"]]
:plugins [[lein-figwheel "0.5.15"]
[lein-cljsbuild "1.1.7" :exclusions [[org.clojure/clojure]]]]
:source-paths ["src"]
:cljsbuild {:builds
[{:id "dev"
:source-paths ["src"]
;; The presence of a :figwheel configuration here will cause figwheel to inject the
;; figwheel client into your build
:figwheel {:on-jsload "fred.core/on-js-reload"
;; :open-urls will pop open your application in the default browser once
;; Figwheel has started and compiled your application. Comment this out
;; once it no longer serves you.
:open-urls ["http://localhost:3449/index.html"]}
:compiler {:main fred.core
:asset-path "js/compiled/out"
:output-to "resources/public/js/compiled/fred.js"
:output-dir "resources/public/js/compiled/out"
:source-map-timestamp true
;; To console.log CLJS data-structures make sure you enable devtools in Chrome
;; https://github.com/binaryage/cljs-devtools
:preloads [devtools.preload]}}
;; This next build is a compressed minified build for production. You can build this
;; with: lein cljsbuild once min
{:id "min"
:source-paths ["src"]
:compiler {:output-to "resources/public/js/compiled/fred.js"
:main fred.core
:optimizations :advanced
:pretty-print false}}]}
:profiles {:dev {:dependencies [[binaryage/devtools "0.9.9"]
[figwheel-sidecar "0.5.15"]
[com.cemerick/piggieback "0.2.2"]]
;; need to add dev source path here to get user.clj loaded
:source-paths ["src" "dev"]
;; for CIDER
;; :plugins [[cider/cider-nrepl "0.12.0"]]
:repl-options {:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}
;; need to add the compliled assets to the :clean-targets
:clean-targets ^{:protect false} ["resources/public/js/compiled"
:target-path]}})