在启动REPL时,没有必要将代码引入任何工具中,以切换命名空间。
长期以来,通过定义自定义的user
命名空间来管理组件生命周期(启动、停止、重启)是一种独立于编辑器、工具或组件库的开发方法,即在所有情况下都适用。
在项目中创建一个dev/user.clj
文件,它定义了一个user
命名空间。除非它是comment
形式,否则该命名空间中的代码将在REPL启动时加载。
REPL以user
命名空间启动,因此定义在dev/user.clj
中的函数无需切换到其他命名空间或使用全限定名称即可立即使用。
在自定义的dev/user.clj
user
命名空间中定义管理组件的函数,会使它们立即在REPL默认使用的命名空间中可用。
此方法的好处是代码更易于维护,开发支持代码和生成代码之间的界限更清晰。
可以通过Clojure CLI别名包含类似component repl和integrant repl这样的库,这样就不会增加CI工作流程和部署的uberjar的负担。
自定义的user
命名空间包含了component repl(或其他像Integrant REPL这样的开发时组件库)的require语句。
个人来说,我使用这种方法来启动各种开发工具,无论它是Leiningen还是Clojure CLI项目。
Practicalli Custom REPL Startup详细说明了通用方法
Practicalli REPL Reloaded详细说明了我使用的特定开发工具(portal、hotload、命名空间重载、事件记录等)
Practicalli Project Templates为seancorfield/deps-new提供了生产级别的模板,其中包括包含aero示例的dev/user.clj
自定义user
命名空间和practicalli/service
模板