请在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](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 表示已加载命名空间但函数无法解析,异常表示命名空间加载失败:它丢失或存在语法错误)。
很好!感谢你,Alex!
很可爱,谢谢。将在发布后在我的typo上进行回归测试。错误信息显示命名空间的事实应该将typo放在打字错误者的眼前。
0

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

你尝试过使用-Sforce吗?

Clojure CLI版本1.10.3.933

感谢Sean Corfield,他在exec-fn的文件中发现了ns声明中的错别字。我们正在考虑,这可能已经被clojure cli捕获了。请查看Sean在其评论中的建议。
...