2024 Clojure 状况调查!分享您的想法。

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

0
工具
重新分类

我在 dépens.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
我在全局 dépens.edn 中有 :paths ["." "src"]

2 个答案

+1

选中
 
最佳答案

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

(ns web.netwok-service

缺少一个字母 r,因此名称空间与文件名不匹配,无法正确地 require。

by
非常感谢您查看。这真是太尴尬了。或许这应该是clojure CLI pipeline中的某个部分导致的呢?
by
如果您在REPL中尝试(我就是这样调试的),需要require 'web.network-service'并且它找到一个匹配的文件,然后加载它,这次留下的是定义为命名空间'web.network-service'。

在那个点上require 'web.network-service/run'会抛出异常--并且CLI告诉你请求的函数不存在。

我认为它在那个点上可以区分nil和异常,并且可以为每种情况提供不同的错误信息(nil表示ns已加载但无法解析函数,而异常表示ns加载失败:它缺失或有语法错误)。
by
太棒了!感谢,Alex!
by
很棒,谢谢。发布后我会在自己的打字错误上进行回归测试。错误信息显示命名空间应该将打字错误放在粗心大意者的眼前。
0
by

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

您尝试过使用 -Sforce 吗?

by
Clojure CLI 版本 1.10.3.933

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