2012-12-24 56 views
0

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表單。原因很明顯。但是,它確實會弄亂我的工作流程,因爲對加載文件的更改顯然不會重新加載名稱空間。

有誰知道是否有一個庫處理明確加載的源文件?如果沒有什麼我會一起破解一些東西(可能是通過在負載中編寫一些醜陋的宏)並將其公開化。

回答

0

好的,回答我的問題......我已經擴展ns-tracker並提交了一個pull請求。我期望的不那麼黑,實際上是合理的。

我的叉子是:https://github.com/hutch/ns-tracker

有一些包括改變NS-跟蹤器。特別是對於我的問題,它支持以clojure/core使用的方式使用load/in-ns。

您可以使用leiningen'checkouts'機制在您的項目中使用此分支。