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,因此命名空间与文件名不匹配,无法正确require。

非常感谢您查阅。这真让人尴尬。也许这应该是由Clojure CLI管道中的某个东西引起的咳嗽?
如果你在REPL中尝试(我就是这样调试的),你需要引入web.network-service,它会找到一个匹配的文件,然后将其加载,这样你就会有一个名为web.netwok-service的定义的命名空间。

在那一刻,运行 web.network-service/run 的 requiring-resolve 将会抛出一个异常 -- CLI 会告诉你请求的函数不存在。

我猜它可以在那个时刻区分nil和异常,并为每种情况提供不同的错误消息(nil 表示命名空间已加载但无法解析函数,异常表示命名空间加载失败:它可能缺失或存在语法错误)。
很棒!谢谢,Alex!
可爱,谢谢。发布后将在此处回归测试。错误消息显示命名空间的事实应该将打字错误直接呈现在错误者面前。
0

你的Clojure CLI版本是哪个?(clojure --version)?

你尝试过使用-Sforce吗?

Clojure CLI版本1.10.3.933

感谢Sean Corfield,他在exec-fn文件的ns声明中发现了拼写错误。我们想也许clojure cli可能已经捕捉到这一点。请查看Sean在其评论中的建议。
欢迎使用Clojure问答社区,在这里您可以向Clojure社区成员提问并获得答案。
...