2

每次我尝试运行时lein cljsbuild once都会出现错误:

无法编写 JavaScript 零

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

这是我一直在做的事情。

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

1 回答 1

2

在新目录中重新开始。您的错误是使用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]}})
于 2018-04-03T14:58:34.740 回答