簡體   English   中英

Lein Figwheel編譯錯誤

[英]Lein Figwheel Compile Error

我一天中大部分時間都在使用figwheel,然后在重新啟動(不是第一次)后突然開始編譯失敗。

當我運行lein figwheel時,我得到以下消息。

Figwheel: Starting server at http://localhost:3449
Figwheel: Watching build - dev
[0mCompiling "resources/public/js/compiled/game.js" from ["src"]...
{:file #object[java.net.URL 0x79b3937a "file:/home/dan/dev/org/danjoe/game/src/game/state.cljs"], :line 1, :column 1, :tag :cljs/analysis-error}
ANALYSIS ERROR:  at line 1 file:/home/dan/dev/org/danjoe/game/src/game/state.cljs on file file:/home/dan/dev/org/danjoe/game/src/game/state.cljs, line 1, column 1
Subprocess failed

我從較早的地方簽出了一些穩定的代碼,但仍然失敗。

我吹走了~/.m2目錄中的所有內容,然后又去了一次。 我簽出了回購的新副本,並在那里出現相同的錯誤。

錯誤的唯一有意義的部分是對某些文件的第1行的“ ANALYSIS ERROR的引用-只是出於我的理智考慮,它就在這里。

(ns game.state
  (:refer-clojure :exclude [get])
  (:require [reagent.core :as reagent]
            [game.views.heroes :as default-view]))

如果我轉到該文件並故意破壞名稱空間(將其切換為不正確的名稱),然后再次運行lein figwheel ,則分析錯誤只是切換為指向項目中的另一個文件。 如果我破壞了所有名稱空間,則它將開始引發第2行(或下一個s表達式所在的位置)的分析錯誤。

這是項目依賴項。

:dependencies [[org.clojure/clojure "1.7.0"]
              [org.clojure/clojurescript "1.7.170"]
              [org.clojure/core.async "0.2.374"]
              [reagent "0.5.0"]
              [secretary "1.2.0"]]

還有我正在使用的插件。

  :plugins [[lein-cljsbuild "1.1.1"]
           [lein-figwheel "0.5.0-1"]]

聽起來您可能有一些緩存的JavaScript會導致編譯失敗。有很多原因會導致此失敗,但是當我更新依賴項以使用更高版本時,我就遇到了這個問題。 問題在於,Figwheel無法實現您的cljs文件依賴於更改后的依賴版本,因此不會重新編譯源代碼。

解決的方法是運行lein干凈。 但是,請注意,您還需要在project.clj文件中設置:clean-targets鍵。 Thie值是運行lein clean時要清除的目錄的列表。 默認情況下,它僅清除低於目標的內容。 但是,大多數人傾向於將其javascript放在資源/公共目錄之下。 我的project.clj中有以下內容

:clean-targets ^{:protect false} [:target-path
                                    [:cljsbuild :builds :app :compiler
                                     :output-dir]
                                    [:cljsbuild :builds :app :compiler
                                     :output-to]]

這基本上將我存儲cljsbuild輸出的目錄添加到:target-path中定義的目錄集中。 運行lein clean現在將刪除:output-dir和:output-to中的內容。 請注意,您必須包括:protect false值,否則lein會忽略您的添加。

該錯誤最終是循環依賴關系,但是由於Clojurescript 1.7.170中的錯誤,分析器沒有捕獲依賴關系,而是無限循環地遞歸分析這兩個依賴關系(直到堆棧溢出)。

該錯誤現在已在master中修復,但無論如何我將在此對其進行分類。

  1. 使用獨立的Clojurescript編譯器 ,以確保該工具不會誤入錯誤。
  2. 使用{:verbose true}選項進行編譯。

請參閱調試輸出開始以顯示循環依賴關系:

Reading analysis cache for jar:file:/home/dan/Downloads/cljs.jar!/cljs/core.cljs
Compiling src/game/ui/widgets.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
Analyzing file:/tmp/lispjam/src/game/views/heroes.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
Analyzing file:/tmp/lispjam/src/game/views/heroes.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
Analyzing file:/tmp/lispjam/src/game/views/heroes.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
Analyzing file:/tmp/lispjam/src/game/views/heroes.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
Analyzing file:/tmp/lispjam/src/game/views/heroes.cljs
Analyzing file:/tmp/lispjam/src/game/state.cljs
...

解決循環依賴關系可以解決所有問題,但是在以后的Clojurescript版本中,您應該收到編譯時分析警告,讓您知道您的代碼具有循環依賴關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM