如何优化Clojure/ClojureScript动态Web项目依赖编辑与变更监听工作流?
针对你同时开发主仓库principal和依赖仓库supporting时的繁琐流程,以下是几个直接可行的优化方案:
1. 替换为本地依赖,跳过lein install
在principal的project.clj中,把supporting的依赖项从版本号形式替换为本地路径引用:
;; 原来的依赖 [com.yourname/supporting "0.1.0"] ;; 替换为本地路径 [com.yourname/supporting :local/root "~/projects/supporting"]
shadow-cljs和Leiningen都会直接加载本地supporting仓库的源码,无需执行lein install。修改supporting的代码后,只需在CIDER中重新加载对应的命名空间(快捷键C-c C-k,或执行(require 'your.supporting.namespace :reload)),就能在principal的应用中实时看到变更,不用重启watch进程。
注意:正式提交代码前,记得把本地依赖改回版本号形式,避免影响团队其他成员。
2. 配置shadow-cljs监听本地依赖源码
如果项目以shadow-cljs为主导构建,可直接在shadow-cljs.edn的:dependencies中配置本地依赖:
:dependencies [[com.yourname/supporting :local/root "~/projects/supporting"]]
shadow-cljs的watch进程会自动监听supporting源码目录的变化,一旦修改代码会自动触发重新编译。此时在CIDER的CLJS REPL中,执行:reload或:reload-all就能同步更新应用,完全省去复制代码、重启watch的步骤。
3. 将supporting源码加入主项目classpath
在principal的project.clj的:dev profile中,添加supporting的源码路径到:source-paths:
:profiles {:dev {:source-paths ["src" "../supporting/src"]}}
这样启动CIDER REPL时,supporting的源码会被直接加载到classpath中。你可以直接在Emacs中编辑supporting的文件,保存后通过CIDER重新加载命名空间,实时调试变更,无需在两个仓库间来回切换临时代码。
内容的提问来源于stack exchange,提问作者Pedro Delfino

