(ns example.core
(:import goog.Uri))
ClojureScript projects always auto-include the Google Closure Library, a massive library built and used by Google on many of their products (Gmail, Docs, etc). It has low-level utilities for DOM manipulation, server communication, animation, data structures, unit testing, rich-text editing, and UI widgets/controls.
You may first want to consider the following ClojureScript libraries which wrap some functionality from Google Closure Library. Their source code also serves as good examples of how to use Closure directly.
ClojureScript wrapper | Closure Libraries |
---|---|
* included in ClojureScript’s core library
Some helpful blog posts:
To use Google Closure in your ClojureScript code, the rule is to use:
:import
for Closure classes (which are also namespaces, like goog.Uri
) and enums
:require
for everything else
This is only for when you would like to refer directly to a class which is also a namespace, otherwise just use :require
in your ns
form or use the require
REPL helper.
(ns example.core
(:import goog.Uri))
;; in REPL
(import 'goog.Uri)
(Uri. "http://example.com")
;;=> #<http://example.com>
(ns example.core
(:import [goog.events EventType]))
;; in REPL
(import '[goog.events EventType])
EventType.CLICK
;;=> "click"
(ns example.core
(:require [goog.math :as math]))
;; in REPL
(require '[goog.math :as math])
(math/clamp -1 0 5)
;;=> 0
(ns example.core
(:require
[goog.string :as gstring]
goog.string.format))
;; in REPL
(require '[goog.string :as gstring])
(require 'goog.string.format)
(goog.string.format "%05d" 123)
;;=> 00123
;; or use the alias
(gstring/format "%05d" 123)
;;=> 00123