在启动REPL时切换命名空间不需要将代码引入任何工具。
通过定义自定义的用户命名空间(如_leiningen_中的操作)是管理组件生命周期(启动、停止、重启)的一种长期存在的开发方法,它不受编辑器、工具或组件库的依赖,即它可以与任何东西一起工作。
在项目中创建一个dev/user.clj
文件,定义一个user
命名空间。除非是注释形式,否则该命名空间中的代码在REPL启动时加载。
REPL从user
命名空间启动,因此定义在dev/user.clj
中的函数无需切换到不同的命名空间或使用完全限定名称即可立即使用。
在自定义的dev/user.clj
user
命名空间中定义管理组件的函数使它们立即在REPL默认使用的命名空间中可用。
这种方法的好处是代码更清晰,开发支持代码与生产代码之间的分离更明确。
可以通过Clojure CLI别名包括组件REPL和integrant-repl之类的库,这样它们就不会增加CI工作流程和最终部署的uberjar的重量。
自定义的user
命名空间包含组件REPL(或其他开发时组件库,如Integrant REPL)的require语句。
我个人使用这种方法启动各种支持开发工具(无论是否为_leiningen_或Clojure CLI项目)。
Practicalli Custom REPL Startup 详细说明了通用方法
Practicalli REPL Reloaded 详细说明了我使用的特定开发工具(portal、hotload、命名空间重新加载、事件记录等)
Practicalli Project Templates 为seancorfield/deps-new提供生产级模板,其中包括一个自定义的user
命名空间、包含aero的practicalli/service
模板的Integrant REPL示例