我用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式闪光灯的uberwar吗?
我发现了How do I deploy a single-page app. written in ClojureScript / Figwheel to a static server?,但它似乎是从头开始的(不是特定于试剂的),并且很多链接都消失了。
我对无花果轮/超级战役的工作方式不熟悉,所以我什至不知道该怎么做。
即使使用普通的0.8.1试剂项目AFAICT,也会发生这种情况。
当我第一次访问该页面时,我会非常简短地看到Figwheel警告文本。在页面加载之前,我什么也不想看到。 (或者也许让我放一个自定义微调器或类似的东西,但是一次只能放一件事。)我也不想不必打包并将不必要的Figwheel代码发送给每个客户端,因为它虽然不大,但是永远不需要在那里。
答案 0 :(得分:0)
我认为您正在寻找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
答案 1 :(得分:0)
我认为您的包装过程将需要两个步骤:
首先:使用生产配置文件编译ClojureScript代码。您可能有lein cljsbuild prod once
或类似目标可用的类似内容。这个想法是,您希望生产概要文件生成该单一的,优化的JavaScript文件,该文件将由Tomcat作为静态资源提供。
第二:使用lein ring uberwar
为Tomcat构建WAR文件。
取决于从Web应用程序提供静态文件的方式,静态资源的路径可能会更改,但是除非添加任何其他配置,否则您将按照以下答案中的说明提供静态资源:{{3 }}