Deployment 如何在不需要Figwheel的情况下部署试剂应用程序?
我在试剂中编写了一个web应用程序,并使用Figwheel在本地开发和运行它,这非常棒。现在我想部署它,所以我运行了“莱因环战争”。上面写着“编译ClojureScript…”(3次!),听起来很有希望。但当我部署war文件并访问该页面时,我突然看到: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是否应该参与生产部署?
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代码。您可能会在
或类似的目标中提供类似的功能。这个想法是希望生产概要文件生成一个优化的JavaScript文件,Tomcat将其作为静态资源提供lein cljsbuild prod once
- 第二:使用
为Tomcat构建WAR文件lein-WAR
根据您从web应用程序提供静态文件的方式,静态资源的路径可能会更改,但除非您添加任何其他配置,否则您将按照以下回答提供静态资源:我认为打包过程需要两个步骤:
- 首先:使用生产概要文件编译ClojureScript代码。您可能会在
或类似的目标中提供类似的功能。这个想法是希望生产概要文件生成一个优化的JavaScript文件,Tomcat将其作为静态资源提供lein cljsbuild prod once
- 第二:使用
为Tomcat构建WAR文件lein-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重新配置我的生产服务器需要做更多的工作(对我来说也是更多的出错机会)