lein cljsbuild给出“无法编写JavaScript nil”错误

时间:2018-04-01 19:03:58

标签: clojurescript leiningen cljsbuild

每次我尝试运行lein cljsbuild once时都会收到错误消息:

  

无法编写JavaScript nil

任何想法或想法都会受到赞赏,因为我已经坚持了一段时间,不幸的是不能继续下去。

这是我一直在做的事情。

  1. 通过runnin lein new app finance
  2. 创建一个名为finance的新项目
  3. 使用依赖项,cljsbuild,插件和主要规范更新project.clj文件(见下文)
  4. 运行lein deps,这有效。
  5. 运行lein run,这也有效,在控制台中吐出'Hello World'。
  6. 尝试运行lein cljsbuild once,然后我收到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}}]})
    

1 个答案:

答案 0 :(得分:1)

从新目录重新开始。您的错误是在创建项目时使用app而不是figwheel

> lein new figwheel fred
> cd fred
> lein cljsbuild once      ; => works fine
> lein figwheel            ; => starts interactive browser repl

通常您只使用figwheel,但cljsbuild once也有效。

您的project.clj现在如下所示。请特别注意您缺少的:plugins部分:

(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]}})