请在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!
很棒,谢谢。我会在发布时在我的 typo 上进行回归测试。错误消息显示命名空间应该能让拼写错误的用户直面其错误。
0

您使用的 Clojure CLI 版本是哪个版本?(clojure --version)?

您尝试过使用 -Sforce 吗?

Clojure CLI 版本 1.10.3.933

感谢 Sean Corfield,他发现了 exec-fn 文件中 ns 声明中的一个拼写错误。我们考虑这可能是 Clojure CLI 捕获的。请查看 Sean 在其评论中的建议。
...