ClojureScript

外部ライブラリのラッピング

このページでは、非 Closure 互換 JavaScript ライブラリを ClojureScript で使用できるようにラッピングする方法を説明します。ライブラリをラッピングする前に、他のユーザーによって既にラッピングされていないことを確認してください。 CLJSJS は、選別された依存関係のセットを提供するための有望なコミュニティ主導の取り組みです。重複した作業や依存関係の競合を避けるため、CLJSJS などの共同作業に貢献することをお勧めします。

非 Closure 互換ライブラリを ClojureScript で使用できるようにラッピングする場合は、ライブラリの開発バージョン、ライブラリの製品バージョン、および 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.xml または project.clj に他の依存関係と同様に JAR を追加し、ClojureScript ソース内で com.facebook.React 名前空間を必要として React をインポートできるようになりました。この場合、名前空間は完全に syntheticであることを理解することが重要です。外部の依存関係は常にグローバルにロードされます。

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"]}