1

我在 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 吗?

我找到了如何部署单页应用程序。用 ClojureScript / Figwheel 编写到静态服务器?但它似乎从头开始(不是特定于试剂的),而且很多链接都死了。

我不熟悉 figwheel/uberwar 的工作原理,所以我什至不知道该尝试什么。

即使使用简单的 0.8.1 试剂项目 AFAICT,也会发生这种情况。

当我第一次访问该页面时,我非常简短地看到了 Figwheel 警告文本。在页面加载之前,我什么都不想看到。(或者也许让我放入一个自定义微调器或其他东西,但一次只做一件事。)我还希望不必打包并向每个客户发送不必要的 Figwheel 代码,因为它不大,但永远不需要它那里。

4

2 回答 2

0

我认为您的打包过程需要两个步骤:

  • 首先:使用生产配置文件编译 ClojureScript 代码。您可能有类似的东西可用于lein cljsbuild prod once或类似的目标。这个想法是您希望生产配置文件生成单个优化的 JavaScript 文件,该文件将由 Tomcat 作为静态资源提供服务。

  • 第二:为 Tomcat 构建 WAR 文件,使用lein ring uberwar.

根据您从 Web 应用程序提供静态文件的方式,静态资源的路径可能会发生变化,但除非您添加任何其他配置,否则您将按照以下答案中的说明提供静态资源:https://stackoverflow。 com/a/7820392/483566

于 2019-04-09T02:25:23.443 回答
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
于 2019-04-05T16:09:25.883 回答