请在 2024 年 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面,了解更多有关如何使用本站的信息。

0 投票
in 工具 by
recategorized by

我的 deps.edn 文件中有两个别名

{
 :deps
 {
  org.clojure/spec.alpha {:mvn/version "0.2.194"}
  aleph/aleph {:mvn/version "0.4.7-alpha7"}
  hiccup/hiccup {:mvn/version "2.0.0-alpha2"}
  }

 :aliases 
 { 
  :web-server {
               :exec-fn web.network-service/run 
               :exec-args {:port 8080} 
               }
  :test-web-server { 
                    :exec-fn test.tnetwork-service/run 
                    :exec-args {:port 9090}
                    }
  }
 }

当调用时

clojure -X:web-server

我得到了

Function not found: web.network-service/run

在调用时,一切正常

clojure -X:test-web-server

我不知道为什么会这样,exec-funs 实际上几乎是相同的。请查看完整代码: https://github.com/sidesteps/network-grid
我的全局 deps.edn 文件中包含 :paths ["." "src"]

2 答案

+1 投票
by
selected by
 
最佳答案

src/web/network_service.clj 中你有一个打字错误

(ns web.netwok-service

缺少一个 r,所以命名空间与文件名不匹配,无法被正确地 require。

非常感谢您查看。这真的很尴尬。也许这应该是clojure cli管道中的某个地方导致的咳嗽?
如果在REPL(我是这样调试的)中试一下,你需要引入web.network-service,它会找到一个匹配的文件,然后加载它,这时你就只剩下了定义为命名空间的web.netwok-service。

此时使用requiring-resolve web.network-service/run将会抛出异常 —— CLI告诉你请求的函数不存在。

我想它可以在那一刻区分nil和异常,并根据情况提供不同的错误信息(nil表示命名空间已加载但函数无法解析,异常表示命名空间加载失败:遗漏或存在语法错误)。
太棒了!谢谢你,Alex!
非常感谢,我会发布后在我的测试中回归测试。错误信息显示了命名空间,这应该使打字错误的创作者感到尴尬。
0 投票

Clojure 命令行界面 (clojure --version) 的哪个版本?

您尝试过使用 -Sforce 吗?

Clojure 命令行界面版本 1.10.3.933

感谢 Sean Corfield,他在 exec-fn 文件的 ns 声明中发现了打字错误。我们认为这可能被 Clojure 命令行界面捕获。请查看 Seans 的评论中的建议。
...