2013-03-13 12 views
5

私はlein-cljsbuildで持っているいくつかのJSライブラリをコンパイルして、ClojureScriptコードベースでそれらを統合しようとしています。最初にgoog.provideを各ファイルの先頭に追加しました。ファイルは、Javaのように名前空間に従ってディレクトリツリーに階層的に整理されています。それは名前空間です。abcはsrc-js/libs/a/b/c.jsにあります。ClojureScriptでCljsbuildを使用して外部JSファイルをコンパイル

私はJSファイルをsrc-js/libsのプロジェクトのルートディレクトリに置いています。レイン-cljsbuildのオプション:JSファイルの

{:id "prod", 
:source-paths ["src-cljs" "src-js"] 
:compiler 
{:pretty-print false, 
    :libs ["libs/"] 
    :output-to "resources/public/js/compiled-app.js", 
    :optimizations :simple}} 

なしコンパイルアプリのファイルにコンパイルされなかっます。どうしましたか?

私はまた、リソース/ closure-js/libsにそれらを成功させることなく入れようとしました。

私はlein-cljsbuild 0.3.0を使用しています。

答えて

4

まず、一部のテキストで示唆されているものとは異なり、private.closureライブラリの場所をproject.cljのクラスパス設定ステートメントに含める必要はありません。したがって、あなたの "source-paths:"ステートメントに含まれている "src/js"ディレクトリが別の目的のためでなければ、それを削除することができます。

第2に、プライベートクロージャーコードをインポートするために、project.cljに追加する唯一のことは、作成した "libs:"参照です。しかし、あなたが入力したものとは異なり、その参照は単なるディレクトリではなく、特定の* .jsファイル(またはファイル)でなければなりません。したがって、使用するライブラリがtest.jsという名前のファイルで、/ src/jsディレクトリにある場合、libs:エントリは "src/js/test.js"になります。そのプラグインのdefault:libsディレクトリオプションを使用する場合は、cljs-buildリリースノートを参照してください。

ブラウザベースのREPL(cljsbuildのrepl-listenオプション)を使用していても、まだ読み込めない場合は(これはすでにわかっているようですが、/reference /あなたのコンパイル済みapp.jsのソースのどこかに:requireステートメントを入れるまで(例えば "(ns testing(:require [myprivatelib])")、あなたはコンパイルして、コンパイルしたapp.jsへのリンクをブラウザページに再ロードします。これはそのコードベースをもたらします。さもなければ、あなたのブラウザREPLはクロージャーライブラリに用意されている名前空間が定義されていないと主張し続けます。

こちらがお役に立てば幸いです。

+0

src-js(マイナス、スラッシュではありません)はクラスパスに含まれていないので、追加します。 特定のライブラリを指定する必要はありません。ディレクトリを指定することはできますが、動作しますが、バグがあります。自動的に階層内のファイルは再コンパイルされません。 cljsbuildのバグトラッカーを参照してください。 最後に、私のファイルはコンパイルされませんでした。これは、a)cljsファイルでは必要ないためです。 b)マイナス/ハイフン記号を含むファイルのバグがありました。バグトラッカーも参照してください。 – z1naOK9nu8iY5A

+0

確かに、JSファイルをコンパイルするためにディレクトリ全体を指定することは可能です。あなたが言及したように、ディレクトリは:source-pathではなく:libキーワードで指定する必要があります。私の例では、libsは "src-js/libs"でなければなりません。 – z1naOK9nu8iY5A

関連する問題