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

Ert*_*tin 2 clojure

我正在使用 Cursive 并将别名设置为dev,当我运行 REPL 时,它不会加载 deps 配置文件中定义的命名空间:

 :aliases {:dev {:main-opts ["--init" "src/my/server/core.clj"
                             "--eval" "(my.server.core/-main)"]}}
Run Code Online (Sandbox Code Playgroud)

Sea*_*eld 5

我在命令行尝试了这个,它按预期工作,加载my.server.core然后运行它的-main函数,所以我怀疑 Cursive 正在使用-R别名,而不是所以-A它只是拉入:extra-deps而不是拉入:main-opts(这只是一个猜测,我不使用草书)。我最好的建议是在 Clojurians Slack 的频道中询问#cursive,因为这是 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)"]}}}
Run Code Online (Sandbox Code Playgroud)

当您指定 时:main-opts,这将禁止启动 REPL:

$ clj -A:dev
#object[clojure.lang.Namespace 0x3dddbe65 "my.server.core"]
$
Run Code Online (Sandbox Code Playgroud)

因此,您需要添加-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=> 
Run Code Online (Sandbox Code Playgroud)