emacs - 使用 Emacs 和 Cider 进行 Clojure 编码

标签 emacs clojure cider

我是 Clojure 编码的新手,并阅读了许多文章来设置 Emacs 以进行开发。
设置本身按设计工作,但我一直在从 Cider session 运行服务器,并在进行任何代码更改时完全杀死 Emacs。或者,我需要从 shell session 中找到服务器进程,并从那里杀死它。这远非理想。

clojure-getting-started/web.clj

(defn -main [& [port]]
  (let [port (Integer. (or port (env :port) 5000))]
    (jetty/run-jetty (site #'app) {:port port :join? false})))

苹果酒专场
clojure-getting-started.web> (defonce server (-main))

启动服务器后,我将收到以下错误 (server)功能:
1. Unhandled java.lang.ClassCastException
   org.eclipse.jetty.server.Server cannot be cast to clojure.lang.IFn

错误消息是有道理的,但如何仅使用 Emacs 刷新我的代码库?
我想(并希望)有比在 Emacs 上启动 shell session 并在那里终止进程更好的方法......

最佳答案

假设您想要的是运行一个码头服务器,并在您从 emacs 中更改它时加载或重新加载您的代码。虽然已经给出的建议很好,但它可能比开始时需要的更复杂。我的建议是利用 lein 的一些模板,它们将为您设置默认环境和工作流程。然后,您可以在了解更多信息时优化此默认设置,直到获得适合您的工作流程。我的建议是从默认的 compojure 模板开始,即

lein new compojure my-project

这将使用基本的 ring 和 compojure 库和 lein 插件以及一个简单的开发配置文件创建一个裸骨项目。

编辑 src/my_project/handler.clj 文件并添加 ring.middleware.reload 中间件,例如
(ns my-project.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.reload :refer [wrap-reload]]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))

(defroutes app-routes
  (GET "/" [] "Hello World")
  (route/not-found "Not Found"))

(def app
  (-> app-routes
      wrap-reload
      (wrap-defaults site-defaults)))

wrap-reload 中间件将导致您的代码在修改时重新加载。您无需重新启动 jetty 服务器即可使您的代码更改生效 - 只需重新加载页面即可。

在终端运行
lein ring server

或者
lein ring server-headless

这将启动一个监听端口 3000 的码头服务器。然后在 emacs 中,您可以在编写代码时打开一个苹果酒 repl 来使用。除非对 project.clj 文件进行更改,否则无需重新启动服务器进程。与苹果酒过程相同。

然后,一旦您对此感到满意,请查看 lein-ring 文档。在那里您将找到有关如何在项目中设置 repl.clj 文件的信息。一旦你这样做,你将能够做类似的事情
lein repl

然后从该 repl 中,执行类似的操作
(start-server)

这将启动服务器。然后您可以切换到 emacs,而不是运行 cider-jack-in,您可以执行 cider-connect,这将连接到已经运行 repl 的他,而不是启动第二个 repl session 。稍后,如果您决定也开始查看 clojurescript,您可以查看 clojure+clojurescript 应用程序的一些默认模板。我非常喜欢 figwheel 并且经常使用试剂,所以我也觉得试剂模板很好。

那里有很多 lein 模板,我发现运行它们并查看它们的作用非常有用。然后我倾向于挑选我喜欢的功能/选项。

关于emacs - 使用 Emacs 和 Cider 进行 Clojure 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348974/

相关文章:

emacs - M-d 在 ansi-term 中不起作用

macros - 宏中的 clojure 引号和代字号

php - 是否有用于 php 的纯 html 模板系统?

emacs - 在 Emacs 中使用 `cider-jack-in` 执行 Clojure

shell - elisp 解析异步 shell 命令的输出

emacs - 在 cider repl 中打印执行输出

string - 检查字符串是否以 Emacs Lisp 中的后缀结尾

macos - 在 Mac OS X 上使用 GUI(从 Dock)启动 Emacsclient

emacs - 在 Emacs 组织模式下,包含 "\__"的文字字符串的 Latex 导出给出问题

clojure - 使用Clojure中的自定义方法漂亮地打印记录