Skip to content

Foreign library dependencies

Juho Teperi edited this page May 2, 2017 · 2 revisions

Often JavaScript libraries depend on other libraries, for example when a library extends jQuery or builds on top of React. In these cases the dependencies should be declared as dependencies of the package:

Example:

(set-env!
  :resource-paths #{"resources"}
  :dependencies '[[cljsjs/boot-cljsjs "0.5.2" :scope "test"]
                  [cljsjs/react "15.0.0-0"]
                  [cljsjs/react-dom "15.0.0-0"]])

This ensures that the externs and foreign library declarations are available for the dependency libraries.

Additionally, when generating deps.cljs with deps-cljs one should declare :requires to the foreign library namespaces which provide the required libraries:

   (deps-cljs :name "cljsjs.react-numeric-input"
              :requires ["cljsjs.react"
                         "cljsjs.react.dom"])

This ensures that the required foreign library code is evaluated before the library code, that is, window.React is available when running React-numeric-input code.

When writing deps.cljs directly:

{:foreign-libs [{:provides ["cljsjs.react-numeric-input"]
                 :requires ["cljsjs.react" "cljsjs.react.dom"]}]
 :externs ["..."]}

Notes

  • Not all React libs depend on both React and React-DOM
  • There are existing packages that do not have dependencies or foreign-lib requires set, so you might be pointed here when updating a package