5

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

JS ファイルを src-js/libs のプロジェクトのルート ディレクトリに配置しました。lein-cljsbuild には次の :compiler オプションがあります。

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

コンパイル済みアプリ ファイルにコンパイルされる JS ファイルはありません。どうしたの?

また、それらを resources/closure-js/libs に配置しようとしましたが、成功しませんでした。

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

4

1 に答える 1

4

まず、一部のテキストで提案されていることとは異なり、project.clj のクラスパス構成ステートメントにプライベート クロージャー ライブラリの場所を含める必要はありません。したがって、「source-paths:」ステートメントに含まれる「src/js」ディレクトリが他の目的でない限り、削除できます。

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

第三に、(これはすでにご存知のようですが、これが私をつまずかせた原因です)ブラウザでバックアップされたREPL(cljsbuildのrepl-listenオプション)を使用している場合でも、ロード/参照/使用することはできません:require ステートメントをコンパイル済み app.js のソースのどこかに含めるまで (例: "(ns testing (:require [myprivatelib]))" )、その REPL からのプライベート ライブラリ アセットを再コンパイルする必要があります (lein cljsbuild を 1 回) 実行し、compiled-app.js へのリンクを含むブラウザー ページをリロードします。これにより、そのコード ベースが取り込まれます。そうしないと、ブラウザーの REPL は、クロージャー ライブラリで提供されている名前空間が定義されていないと主張し続けます。

これが役立つことを願っています。

于 2013-03-25T18:47:27.283 に答える