ClojureScript

封裝外部依賴

本頁說明如何封裝與 Closure 不相容的 JavaScript 程式庫,以供 ClojureScript 使用。在封裝程式庫之前,請確保其他人尚未封裝它。CLJSJS 是一個有前景的社群驅動專案,旨在提供一組精選的依賴項。為了避免重複工作和依賴衝突,建議為像是 CLJSJS 的聯合專案做出貢獻。

當為 ClojureScript 使用封裝與 Closure 不相容的程式庫時,請確保包含程式庫的開發版本、程式庫的生產版本和一個 externs 檔案。例如,如果您要封裝 React 以供使用,目錄結構可能如下所示:

src/deps.cljs
src/react/react.js
src/react/react.min.js
src/react/externs.js

請注意,您必須指定 deps.cljs

React 的 deps.cljs 檔案可能如下所示:

{:foreign-libs
  [{:file "react/react.js"
    :file-min "react/react.min.js"
    :provides ["com.facebook.React"]}]
 :externs ["react/externs.js"]}

現在,使用者可以像在他們的 pom.xmlproject.clj 中新增任何其他依賴項一樣,簡單地新增您的 JAR,並在他們的 ClojureScript 原始碼中要求 com.facebook.React 命名空間以匯入 React。重要的是要了解,在這種情況下,命名空間是完全合成的 - 外部依賴項總是全域載入。

JAR 可以包含任意數量的外部程式庫,只需將更多項目新增到 :foreign-libs 向量中即可。

:file-min 是完全可選的,但建議使用上述模式,以獲得程式庫消費者的最佳體驗。

如需完整範例,請參閱 react-cljs

如果您的外部程式庫有依賴項,則您必須在 :requires 向量中列舉它們。

{:foreign-libs
  [{:file "jquery/jquery.js"
    :file-min "jquery/jquery.min.js"
    :provides ["org.jquery.jQuery"]}
   {:file "jquery/ui/core.js"
    :file-min "jquery/ui/core.min.js"
    :provides ["org.jquery.ui.Core"]
    :requires ["org.jquery.jQuery"]}
   {:file "jquery/ui/autocomplete.js"
    :file-min "jquery/ui/autocomplete.min.js"
    :provides ["org.jquery.ui.Autocomplete"]
    :requires ["org.jquery.ui.Core"]}]
 :externs ["jquery/jquery.js" "jquery/jquery.ui.js"]}