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

欢迎!请查看 关于 页面以获取更多关于如何使用本站的信息。

0
工具
重新分类

在我的 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

选定
 
最佳答案

src/web/network_service.clj 中有拼写错误

(ns web.netwok-service

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

非常感谢您查看。这真令人尴尬。或许这应该是由Clojure CLI管道中的某些内容引起的咳嗽?
如果您在REPL中尝试(我就是这样调试的),需要加载web.network-service,然后它会找到一个匹配的文件,然后加载它,这样您就剩下web.netwok-service作为一个已定义的命名空间。

此时,在web.network-service/run处进行requiring-resolve将抛出异常,并且CLI会告诉您请求的函数不存在。

我想在这个时候,它应该区分nil和异常,并为每种情况提供不同的错误消息(nil表示ns已加载但找不到函数,异常表示ns加载失败:它缺失或有语法错误)。
太好了!感谢您,Alex!
作者
太好了,感谢。在发布后将对此进行回退测试。错误信息显示命名空间应使那些犯错者在错误面前愧疚。
0
作者

Clojure CLI (clojure --version)的版本是多少?

你尝试过使用-Sforce吗?

作者
Clojure CLI版本 1.10.3.933

感谢Sean Corfield发现exec-fn文件中ns声明中的打字错误。我们思考可能Clojure CLI能够捕获这个错误。请查看Sean在其评论中的建议。
...