如何防止闭包编译器缩小clojurescript中的某些方法?
我正在将quilljs与clojurescript应用程序集成。我将它包含在project.cljs文件中,如下所示:[cljsjs/quill 1.3.5-0] 编译器正在缩小某些方法并导致错误:如何防止闭包编译器缩小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");
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)))))