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 源代码中 require 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"]}