如何防止闭包编译器缩小clojurescript中的某些方法?

如何防止闭包编译器缩小clojurescript中的某些方法?,clojurescript,google-closure-compiler,quill,clojurescript-javascript-interop,Clojurescript,Google Closure Compiler,Quill,Clojurescript Javascript Interop,我正在将quilljs与clojurescript应用程序集成。我将它包含在project.cljs文件中,如下所示:[cljsjs/quill 1.3.5-0] 编译器正在缩小某些方法并导致错误: function xA(a, b) { var c = t(a).getSelection(!0) , d = c.index , e = c.length , h = Quill.import("delta");

我正在将quilljs与clojurescript应用程序集成。我将它包含在project.cljs文件中,如下所示:[cljsjs/quill 1.3.5-0]

编译器正在缩小某些方法并导致错误:

function xA(a, b) {
        var c = t(a).getSelection(!0)
          , d = c.index
          , e = c.length
          , h = Quill.import("delta");
        c = function(b, c, d, e) {
            return function(b) {
                return t(a).updateContents((new e).rf(c).delete(d).nf({
                    image: b
                }))
            }
        }(c, d, e, h);
        return b.c ? b.c(c) : b.call(null, c)
    }
这是错误:未捕获类型错误:中间值.rf不是函数

clojurescript代码如下所示:

(defn file-recieve-handler [this cb]
  (let [range (.getSelection @this true)
        index (.-index range)
        length (.-length range)
        delta (.import js/Quill "delta")]

    (cb (fn [url]
            (.updateContents @this
                             (.insert
                               (.delete
                                 (.retain (new delta) index)
                                 length)
                               #js {:image url}))))))

retain方法和insert方法正在缩小——它们不应该缩小。删除不是出于某种原因,我猜这是因为它是javascript中的一个关键字

我找到了quilljs的externs文件:

我是否需要用某种方式来补充extern文件,或者用另一种方式来编写代码,以便在为编译器启用高级编译时,这两种方法不会缩小

对于某些上下文,下面是完整的文件。基于此


您可以打开externs推断警告,编译器将告诉您可能重命名的内容

;; 在实际的ns中 设定*在推断时发出警告*true ;; 在构建配置编译器选项中 :推断外部为真 看


要帮助调试重命名问题,可以在编译器选项中启用:pseudo names true。这将更容易确定哪些方法被重命名,并且可能需要^js typehint或手动外部程序。

我使用了@thomas heller建议的类型提示,效果很好。我将原始函数分解为两个单独的函数。这里重新写着:

(defn add-image [^js/Quill quill ^js/Quill.imports.delta delta index length url]
  (.updateContents quill
                   (.insert
                     (.delete
                       (.retain delta index)
                       length)
                     #js {:image url})))

;https://github.com/quilljs/quill/pull/995/files#diff-6dafc0fe6b5e9aed0859eef541e68372
(defn file-recieve-handler [^js/Quill quill cb]
  (let [range (.getSelection quill true)
        index (.-index range)
        length (.-length range)
        delta  (new (.-delta (.-imports js/Quill)))]

    (cb (fn [url]
            (add-image quill delta index length url)))))
(defn add-image [^js/Quill quill ^js/Quill.imports.delta delta index length url]
  (.updateContents quill
                   (.insert
                     (.delete
                       (.retain delta index)
                       length)
                     #js {:image url})))

;https://github.com/quilljs/quill/pull/995/files#diff-6dafc0fe6b5e9aed0859eef541e68372
(defn file-recieve-handler [^js/Quill quill cb]
  (let [range (.getSelection quill true)
        index (.-index range)
        length (.-length range)
        delta  (new (.-delta (.-imports js/Quill)))]

    (cb (fn [url]
            (add-image quill delta index length url)))))