名前空間の宣言は、単純モードのコンパイルを使用しているか、拡張モードのコンパイルを使用しているかに関係なく同じです。違いは、Google の依存関係管理に参加せず、ファイルを介しgoog.require('')
てgoog.provide('')
明示的に参照する必要があるライブラリです。externs.js
cljs コンパイラに渡すこのファイルは、すべての変数と関連するメソッドのスタブを提供します。典型的なexterns.js
ものは次のようになります。
// contents of externs.js
var externalLibrary = {}
var externalLibrary.method = function() {}
したがって、Google クロージャ対応ライブラリを参照するには、名前空間宣言は次のようになります。
(ns my.namespace
(:require [goog.events.KeyCodes :as key-codes])
そして、それは次のjavascriptを発行します:
goog.provide("my.namespace");
goog.require("goog.events.keycodes");
クロージャ スクリプトを別の JavaScript ファイルから呼び出したい場合は、最適化コンパイラが名前を保持することを認識できるように、メソッドにエクスポート済みのタグを付ける必要があることに注意してください。(例えば、clojurescript から生成された JavaScript 関数を呼び出したいページに script タグがあるかもしれません)
それは次のようになります。
(defn ^:export externallyCalled [])
注意すべきもう 1 つのことは、clojurescript ではマクロを異なる方法で処理する必要があるということです。これは、リーダーでマクロを「その場で」処理する機能が、clojure と同じように存在しないためです。
次のようにします(この場合、マクロを :as でバインドする必要があることに注意してください)
(ns my.namespace
(:require-macros [my.macros :as my]))
Google の依存関係管理に参加していないコードを呼び出している場合は、js
名前空間と JavaScript 相互運用機能を介してアクセスします...
(. js/nonGoogle (method args)) ; a method access
(. js/nonGoogle -p) ; a property access
すべての通常。バリアントも機能します..