Javascript 底座不';不能为静态资源服务
我试图建立在现有的基座教程应用程序 我正在尝试添加cljs功能,并尝试设置一个统一的clojurescript和clojure环境 我的deps.edn文件如下所示:Javascript 底座不';不能为静态资源服务,javascript,clojure,pedestal,clojurescript-javascript-interop,Javascript,Clojure,Pedestal,Clojurescript Javascript Interop,我试图建立在现有的基座教程应用程序 我正在尝试添加cljs功能,并尝试设置一个统一的clojurescript和clojure环境 我的deps.edn文件如下所示: {:paths ["src"] :deps {io.pedestal/pedestal.service {:mvn/version "0.5.7"} io.pedestal/pedestal.route {:mvn/version "0.5.7"}
{:paths ["src"]
:deps {io.pedestal/pedestal.service {:mvn/version "0.5.7"}
io.pedestal/pedestal.route {:mvn/version "0.5.7"}
io.pedestal/pedestal.jetty {:mvn/version "0.5.7"}
org.slf4j/slf4j-simple {:mvn/version "1.7.28"}
org.clojure/core.async {:mvn/version "1.3.610"}
org.clojure/tools.namespace {:mvn/version "1.1.0"}
org.clojure/tools.logging {:mvn/version "1.1.0"}
org.clojure/data.json {:mvn/version "1.1.0"}
org.clojure/clojurescript {:mvn/version "1.10.758"}
thheller/shadow-cljs {:mvn/version "2.11.23"}
selmer/selmer {:mvn/version "1.12.33"}
hiccup/hiccup {:mvn/version "1.0.5"}}
:mvn/repos {"central" {:url "https://repo.maven.apache.org/maven2/"}
"clojars" {:url "https://clojars.org/repo/"}}}
我的Shadow-cljs.edn文件如下
{:source-paths ["src/cljs"]
:nrepl {:port 9000}
:dependencies [[cider/cider-nrepl "0.21.0"]]
:builds {:app {:target :browser
:output-dir "resources/public/js"
:modules {:main {:init-fn frontend.core/init-fn}}}}}
我的文件夹结构如下所示:
{:paths ["src"]
:deps {io.pedestal/pedestal.service {:mvn/version "0.5.7"}
io.pedestal/pedestal.route {:mvn/version "0.5.7"}
io.pedestal/pedestal.jetty {:mvn/version "0.5.7"}
org.slf4j/slf4j-simple {:mvn/version "1.7.28"}
org.clojure/core.async {:mvn/version "1.3.610"}
org.clojure/tools.namespace {:mvn/version "1.1.0"}
org.clojure/tools.logging {:mvn/version "1.1.0"}
org.clojure/data.json {:mvn/version "1.1.0"}
org.clojure/clojurescript {:mvn/version "1.10.758"}
thheller/shadow-cljs {:mvn/version "2.11.23"}
selmer/selmer {:mvn/version "1.12.33"}
hiccup/hiccup {:mvn/version "1.0.5"}}
:mvn/repos {"central" {:url "https://repo.maven.apache.org/maven2/"}
"clojars" {:url "https://clojars.org/repo/"}}}
该网站除了使用selmer呈现一个HTML模板来创建一个带有“Hello,World!”或“Hello,name!”的H1标记外,与基座教程没有任何不同。在html中,我包含了由shadow cljs从clojurescript生成的main.js
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello, {{name}}</h1>
<script type="text/javascript" src="js/main.js"></script>
</body>
</html>
如您所见,我已在资源路径中添加了resources文件夹
我能够在并行终端中运行shadow cljs和clj,并按如下方式托管服务器:
当我在chrome上查看托管页面时,我得到以下信息。
无论我做什么,我都无法将资源中的公用文件夹添加到客户端的html路径。这样我就无法将main.js与页面一起加载。为什么呢?我是一个既有clojure又有基座的新手,所以我可能错过了一些明显的东西。有人能帮我解决这个问题吗?我不知道如何进行。在这方面,底座文件不是很详细
- 阿贝
- 键
采用单个元素,而不是向量::http/resource path
- 正如键的名称所示,路径必须是Java意义上的资源:文件实际上是由类加载器加载的(资源可以在jar文件中) 在您的情况下,您可以执行以下操作:
- 将
添加到deps.edn文件中的“资源”
(不需要maven repo配置,因为始终包括maven central和Clojar):src
- 使用
作为键的值“public”
::http/resource path
您的edn文件变为:
- 请参阅。请特别注意,Destale的http/资源路径不是文件系统位置,而是URL路径前缀,通过该前缀,Destale可以识别它应该从类路径中赎回的内容。您的设置有两个问题:
{:paths ["src" "resources"]
:deps {io.pedestal/pedestal.service {:mvn/version "0.5.7"}
io.pedestal/pedestal.route {:mvn/version "0.5.7"}
io.pedestal/pedestal.jetty {:mvn/version "0.5.7"}
org.slf4j/slf4j-simple {:mvn/version "1.7.28"}
org.clojure/core.async {:mvn/version "1.3.610"}
org.clojure/tools.namespace {:mvn/version "1.1.0"}
org.clojure/tools.logging {:mvn/version "1.1.0"}
org.clojure/data.json {:mvn/version "1.1.0"}
org.clojure/clojurescript {:mvn/version "1.10.758"}
thheller/shadow-cljs {:mvn/version "2.11.23"}
selmer/selmer {:mvn/version "1.12.33"}
hiccup/hiccup {:mvn/version "1.0.5"}}}
您的服务器配置变为:
(defn create-server
[]
(http/create-server
{::http/routes routes
::http/type :jetty
::http/port 8800
::http/join? false
::http/resource-path "public"
::http/secure-headers {:content-security-policy-settings {:object-src "none"}}}))
我看了这一页。它告诉我在创建服务器映射中添加:resource path键。我的代码中已经有了这个。我做错什么了吗?我尝试了所有路径的组合,例如/resource/resource/js/js等。没有任何效果。你知道我的文件夹结构应该使用什么吗?抱歉,还有更多问题要问。您是否尝试过只使用
::http/resource path“resources/public”
,因为此键需要字符串值,而不是向量。正如我在上面解释的,我已经尝试将所有通用路径作为单个字符串。向量是我最后一次尝试将所有内容相加。我选择了斯坦尼斯拉斯的答案作为正确答案。这对我来说确实有效。我希望底座文档能更详细地解释这一点。。。。我真的很喜欢台座,并且想用它来建造更多的台座!!你真是个天才!!这对我有用!!耶!!!非常感谢你!!不客气;)