在Clojure中,工具.deps的leiningen :repl-options {:init-ns 'user}相当于什么?

问题描述 投票:0回答:1

我使用的是Cursive,我把别名设置为 dev当我运行REPL时,它没有加载在deps配置文件中定义的命名空间。

 :aliases {:dev {:main-opts ["--init" "src/my/server/core.clj"
                             "--eval" "(my.server.core/-main)"]}}
clojure
1个回答
3
投票

我在命令行中试了一下,结果和预期的一样,加载了 my.server.core 然后运行其 -main 函数,所以我怀疑草书是在使用 -R 在别名上而非 -A 所以它只拉来 :extra-deps 而不是 :main-opts 这只是猜测,我不用草书)。我最好的建议是在 #cursive 频道,因为那是支持草书的主要频道(据我所知)。

我还要强调一下 Krisztian 的评论,你可以使用 "-m" "my.server.core" 作为你的全部 :main-opts 自从 -m 将加载命名空间并运行 -main 内。

然而,这些选项是 和莱宁根一样 :init-ns -- 我想你需要的是:

{:aliases {:dev {:main-opts ["-e" "(require,'my.server.core)"
                             "-e" "(in-ns,'my.server.core)"]}}}

当你指定 :main-opts,这将抑制启动REPL。

$ clj -A:dev
#object[clojure.lang.Namespace 0x3dddbe65 "my.server.core"]
$

所以你需要添加 -r 告诉 Clojure CLI 你也想启动 REPL。

clj -A:dev -r
#object[clojure.lang.Namespace 0x433ffad1 "my.server.core"]
my.server.core=> (doc -main)
-------------------------
my.server.core/-main
([& args])
  I don't do a whole lot ... yet.
nil
my.server.core=> 
© www.soinside.com 2019 - 2024. All rights reserved.