Ring帶有中間件'重新加載'(https://github.com/ring-clojure/ring/blob/master/ring-devel/src/ring/middleware/reload。 CLJ)。它基於ns-tracker(https://github.com/weavejester/ns-tracker)。 ns-tracker通過源目錄查找以ns形式開始的可能源文件。它從這些ns表單中包含的信息構建一個依賴關係圖。這當然是完美的,但只適用於明確包含在ns形式中的依賴關係。重新加載中間件,用於處理明確加載的源文件
在Clojure中有一個習慣用法,名稱空間被分成幾個文件。有一個單一的源文件定義了一個命名空間(使用ns形式)。這個文件可以包含任意數量的頂層表單,但值得注意的是會包含加載,通常在頂層,但不一定我想。加載的文件以in-ns形式開始。這不像你想象的那樣晦澀難懂...... clojure.core使用它。
這些加載文件的內容本身並不構成模塊,也不一定被強制爲模塊(循環依賴等)。
ns-tracker不會掃描尋找加載表達式的源文件,也不會查找in-ns表單。原因很明顯。但是,它確實會弄亂我的工作流程,因爲對加載文件的更改顯然不會重新加載名稱空間。
有誰知道是否有一個庫處理明確加載的源文件?如果沒有什麼我會一起破解一些東西(可能是通過在負載中編寫一些醜陋的宏)並將其公開化。