如何在不需要Figwheel的情况下部署Reagent应用程序?

时间:2019-04-05 16:00:24

标签: deployment clojure clojurescript reagent figwheel

我用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代码发送给每个客户端,因为它虽然不大,但是永远不需要在那里。

2 个答案:

答案 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 }}