Javascript 底座不';不能为静态资源服务

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"}

我试图建立在现有的基座教程应用程序

我正在尝试添加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"}
    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又有基座的新手,所以我可能错过了一些明显的东西。有人能帮我解决这个问题吗?我不知道如何进行。在这方面,底座文件不是很详细

  • 阿贝

    • 请参阅。请特别注意,Destale的http/资源路径不是文件系统位置,而是URL路径前缀,通过该前缀,Destale可以识别它应该从类路径中赎回的内容。

      您的设置有两个问题:

    • ::http/resource path
      采用单个元素,而不是向量
    • 正如键的名称所示,路径必须是Java意义上的资源:文件实际上是由类加载器加载的(资源可以在jar文件中)
    • 在您的情况下,您可以执行以下操作:

    • “资源”
      添加到deps.edn文件中的
      :src
      (不需要maven repo配置,因为始终包括maven central和Clojar)

    • 使用
      “public”
      作为键的值
      ::http/resource path

    • 您的edn文件变为:

      {: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”
      ,因为此键需要字符串值,而不是向量。正如我在上面解释的,我已经尝试将所有通用路径作为单个字符串。向量是我最后一次尝试将所有内容相加。我选择了斯坦尼斯拉斯的答案作为正确答案。这对我来说确实有效。我希望底座文档能更详细地解释这一点。。。。我真的很喜欢台座,并且想用它来建造更多的台座!!你真是个天才!!这对我有用!!耶!!!非常感谢你!!不客气;)