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

Deployment 如何在不需要Figwheel的情况下部署试剂应用程序?,deployment,clojure,clojurescript,reagent,figwheel,Deployment,Clojure,Clojurescript,Reagent,Figwheel,我在试剂中编写了一个web应用程序,并使用Figwheel在本地开发和运行它,这非常棒。现在我想部署它,所以我运行了“莱因环战争”。上面写着“编译ClojureScript…”(3次!),听起来很有希望。但当我部署war文件并访问该页面时,我突然看到: ClojureScript has not been compiled! please run lein figwheel in order to start the compiler 在应用程序启动之前 Figwheel是否应该参与生产部署?

我在试剂中编写了一个web应用程序,并使用Figwheel在本地开发和运行它,这非常棒。现在我想部署它,所以我运行了“莱因环战争”。上面写着“编译ClojureScript…”(3次!),听起来很有希望。但当我部署war文件并访问该页面时,我突然看到:

ClojureScript has not been compiled!
please run lein figwheel in order to start the compiler
在应用程序启动之前

Figwheel是否应该参与生产部署?我可以建立一个没有像FOUC一样的flash的uberwar吗

我发现,但它似乎是从零开始的(不是特定于试剂),而且很多链接都是死的

我不熟悉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 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

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

  • 首先:使用生产概要文件编译ClojureScript代码。您可能会在
    lein cljsbuild prod once
    或类似的目标中提供类似的功能。这个想法是希望生产概要文件生成一个优化的JavaScript文件,Tomcat将其作为静态资源提供

  • 第二:使用
    lein-WAR
    为Tomcat构建WAR文件


根据您从web应用程序提供静态文件的方式,静态资源的路径可能会更改,但除非您添加任何其他配置,否则您将按照以下回答提供静态资源:

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

  • 首先:使用生产概要文件编译ClojureScript代码。您可能会在
    lein cljsbuild prod once
    或类似的目标中提供类似的功能。这个想法是希望生产概要文件生成一个优化的JavaScript文件,Tomcat将其作为静态资源提供

  • 第二:使用
    lein-WAR
    为Tomcat构建WAR文件


根据您从web应用程序提供静态文件的方式,静态资源的路径可能会更改,但除非您添加任何其他配置,否则您将按照以下回答提供静态资源:

Hmm,您所说的一切都是正确的,试剂模板已经包含正确的
:main
,所以我得到了一个jar文件,它将所有内容编译成一个简洁的“app.js”。但是它不是一个war文件,所以我不能直接将它传递给我的Tomcat服务器——看起来我需要用一个不同的平台提供一个新的服务器环境。有什么方法可以获得uberjar编译的好处,但是在uberwar中?我以前没有使用过uberwar。通常有一个clj后端,cljs文件
myapp.js
位于./resources/public/compiled/myapp.js`下,并从clj服务器代码中引用。然而,如果你正在编译
app.js
,你就不能像其他js应用一样部署它吗?一个试剂应用程序有客户端js、服务器端代码、小型CSS等等。这就是单个WAR文件的好处:我把它交给Tomcat,它就可以正常工作了。制作一个uberjar(用于编译)只是为了解包并单独重新部署这些部分,这听起来比为一个没有Tomcat的Java SE平台重新配置我的生产服务器需要做更多的工作(对我来说也是更多出错的机会)…
为一个没有Tomcat的Java SE平台重新配置我的生产服务器
。。。这就是我的意思。如果Java main()方法(可能是Clojure)启动Jetty服务器,然后所有内容都在一个uberjar文件中,那么这很容易。好的,我今天下午就接受了,但理想情况下我希望避免这样做。是否无法使用完全AOT编译的试剂应用程序?这两个(uberjar/uberwar)甚至共享相同的lein配置文件——为什么在输出功能上有如此巨大的差异?嗯,你说的一切都是真的,试剂模板已经包含了正确的
:main
,所以我得到了一个jar文件,它将所有内容编译成一个令人印象深刻的紧凑的“app.js”。但是它不是一个war文件,所以我不能直接将它传递给我的Tomcat服务器——看起来我需要用一个不同的平台提供一个新的服务器环境。有什么方法可以获得uberjar编译的好处,但是在uberwar中?我以前没有使用过uberwar。通常有一个clj后端,cljs文件
myapp.js
位于./resources/public/compiled/myapp.js`下,并从clj服务器代码中引用。然而,如果你正在编译
app.js
,你就不能像其他js应用一样部署它吗?一个试剂应用程序有客户端js、服务器端代码、小型CSS等等。这就是单个WAR文件的好处:我把它交给Tomcat,它就可以正常工作了。制作一个uberjar(用于编译)只是为了将其解包并单独重新部署,这听起来比为一个没有Tomcat的Java S重新配置我的生产服务器需要做更多的工作(对我来说也是更多的出错机会)