我大部分时间都在使用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
目录中的所有内容都删掉了,然后再去了。我检查了一个新的repo副本,并在那里得到了同样的错误。
错误中唯一有意义的部分是在某个文件的第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"]]
答案 0 :(得分:2)
听起来你可能有一些缓存的javascript导致编译失败。有很多事情可能导致这种情况,但是当我更新了一个依赖项以便稍后使用时,我遇到了这个问题版。问题是figwheel没有意识到你的cljs文件取决于更改的依赖版本,因此不会重新编译源代码。
解决方法是运行lein clean。但是,请注意您还需要在project.clj文件中设置:clean-targets键。这个值是运行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将忽略您的添加内容。
答案 1 :(得分:0)
错误最终成为循环依赖,但由于Clojurescript 1.7.170中的错误,分析器没有捕获依赖关系,而是在无限循环中递归分析两个依赖关系(直到堆栈溢出)。
这个bug现在已经在主人身上修复了,但是我会在这里简要介绍一下它是如何被识别的。
{:verbose true}
option。请参阅调试输出start以显示循环依赖关系:
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的未来版本中,您应该获得编译时分析警告,让您知道您的代码具有循环依赖。