在开始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自定义REPL启动详细介绍了通用方法
Practicalli REPL重新加载详细介绍了我所使用的特定开发工具(门户、热加载、命名空间重新加载、事件记录等)
Practicalli项目模板提供了seancorfield/deps-new的production级模板,包括自定义 dev/user.clj
user
命名空间,以及包含aero的 practicalli/service
模板的Integrant REPL示例