是否可以使tools.namespace刷新命名空间,而不管其是否更改?

时间:2019-01-29 22:56:56

标签: clojure

这就是我要这样做的原因:我正在使用HugSQL库,该库具有一个def-db-fns宏,其名称如下:(hugsql/def-db-fns "sql/queries.sql")

基本上,它查看sql文件,并使用该文件在调用宏的名称空间中进行函数定义。但是问题是如果我更改queries.sql,tools.namespace不会刷新名称空间,因为名称空间本身没有更改。因此,我想知道是否有某种方法可以使tools.namespace始终刷新特定的名称空间,或者以某种方式链接queries.sql作为依赖项,以便在更改名称空间时刷新它。

edit:到目前为止,我想出的最好的解决方案是:

(ns user
  (require [clojure.java.shell :refer [sh]]
           [clojure.tools.namespace.repl :as tns]))

(defn refresh []
  (sh "touch" "src/project_name/queries.clj")
  (tns/refresh))

1 个答案:

答案 0 :(得分:0)

您可以使用refresh-all代替refresh:刷新所有名称空间,无论它们何时更改。

我在文档中没有找到任何关于将特定名称空间标记为“总是重新加载”的信息。


您可以通过touch将文件设置为将来的修改日期来对其进行黑客攻击,以便在上一次refresh检查之后始终“对其进行修改”,但是如果您自己编辑文件和/或破坏其他监视更改的工具,则将重置该值:

# set the modified date in the year 3000
touch -m -t 300001010101 queries.clj