シンプルモードコンパイルまたはアドバンストモードコンパイルのどちらを使用しているかにかかわらず、ネームスペース宣言は同じです。違いは、goog.require('')
とgoog.provide('')
でGoogleの依存関係管理に参加していないライブラリをexterns.js
ファイルで明示的に参照する必要があることです。このファイルは、cljsコンパイラに渡し、すべてのvarsと関連するメソッドのスタブを提供します。あなたの名前空間宣言は次のようになりますので、Googleの閉鎖を認識ライブラリを参照する
// contents of externs.js
var externalLibrary = {}
var externalLibrary.method = function() {}
:
(ns my.namespace
(:require [goog.events.KeyCodes :as key-codes])
そして、それは、次のJavaScript発する:
goog.provide("my.namespace");
goog.require("goog.events.keycodes");
を典型的な
externs.js
は次のようになります
クロージャスクリプトを別のjavascriptファイルから呼び出す場合、最適化コンパイラが知るように、メソッドをエクスポートしたものとしてタグ付けする必要があります名前を保存する。に注意する
(defn ^:export externallyCalled [])
他の事:このようになっていることを
を(例えば、あなたがclojurescriptから生成されたJavaScript関数を呼び出すしたい場所からページのスクリプトタグを持っているかもしれません)これは、読者の中でそれらを「オンザフライで」処理する能力が、それがクロージャーと同じ方法で存在しないためです。これは、クロージャスクリプトでマクロを別々に扱わなければならないということです。あなたは、Googleの依存関係の管理に参加しなかったコードを呼び出す場合
(ns my.namespace
(:require-macros [my.macros :as my]))
あなたがそれにアクセス:
あなたは次のように(この場合のように、あなたがして、マクロをバインドする義務があることに注意)があることを行いますjs
名前空間とjavascriptの相互運用機能を使用しています。
(. js/nonGoogle (method args)) ; a method access
(. js/nonGoogle -p) ; a property access
すべての通常です。バリアントも効きます。
は:オプションとしてサポートされていますか? :requre-macrosの例では、ベクタがあるはずですか?また、GoogleマップやチャートAPIの例を挙げることができますか? – bmillare
@bmillare両方の良いキャッチです。私は答えを修正しました。ありがとう – sw1nn