我在Reagent中编写了一个Web应用程序,我使用Figwheel在本地开发和运行它,这很棒。现在我想部署它,所以我跑了“lein ring uberwar”。它说“编译ClojureScript ......”(3次!),听起来很有希望。但是当我部署war文件并访问该页面时,我得到一个闪光:
ClojureScript has not been compiled!
please run lein figwheel in order to start the compiler
在申请开始之前。
Figwheel甚至应该参与生产部署吗?我可以建立一个没有这种类似FOUC闪光灯的超级战争吗?
我找到了How do I deploy a single-page app. written in ClojureScript / Figwheel to a static server?但它似乎从头开始(不是Reagent特定的),很多链接已经死了。
我不熟悉figwheel / uberwar如何工作,所以我甚至不知道该尝试什么。
即使使用普通的0.8.1试剂项目AFAICT,也会发生这种情况。
当我第一次访问该页面时,我非常简短地看到了一个Figwheel警告文本。在页面加载之前,我一点都不看。 (或者也许让我放入一个自定义的微调器或其他东西,但一次只有一件事。)我也不想打包并向每个客户端发送不必要的Figwheel代码,因为它不大但是永远不需要它那里。
我想你正在寻找lein uberjar
:
~/expr/cljs-enflame > lein uberjar
Created /home/alan/expr/cljs-enflame/target/cljs-enflame-0.1.0-SNAPSHOT.jar
Created /home/alan/expr/cljs-enflame/target/cljs-enflame-0.1.0-SNAPSHOT-standalone.jar
然后,您可以部署独立版本,并使用以下命令启动程序:
> java -jar target/cljs-enflame-0.1.0-SNAPSHOT-standalone.jar
在project.clj
中指定主程序入口点的位置如下:
:main demo.hello
我认为您的包装过程需要两个步骤:
lein cljsbuild prod once
或类似目标那样的东西。我们的想法是,您希望生产配置文件生成单个优化的JavaScript文件,该文件将由Tomcat作为静态资源提供。lein ring uberwar
为Tomcat构建WAR文件。根据您从Web应用程序提供静态文件的方式,静态资源的路径可能会发生变化,但除非您添加任何其他配置,否则您将按照以下答案中的说明提供静态资源:https://stackoverflow.com/a/7820392/483566