サブディレクトリ public を保持するリソース ディレクトリを使用するブート プロジェクトをセットアップしようとしています。後者には、たとえば、すべての Web 関連コンテンツ、コンパイルされた clojurescript などを含める必要があります。
これは、公開することを意図していないリソースを保持したい場合に適しています。
追加の public ディレクトリなしで実行すると、完全に機能します。追加のサブディレクトリを使用しようとすると、エラーが発生します。関連する構成は次のとおりです。
build.boot で:
(set-env! :resource-paths #{"resources"} ...)
...
(deftask dev
[]
(comp
(serve
:handler 'myapp.server/handler
:reload true
:port 3000)
(watch)
(reload)
(cljs-repl)
(cljs)
(target :dir #{"resources/public"})))
resources ディレクトリ内から:
bash-4.3$ tree
└── public
├── index.html
└── js
└── main.cljs.edn
一方、main.cljs.edn は次のようになります。
{:require [{{name}}.core]
:compiler-options {:asset-path "js/main.out"}}
呼び出し時boot dev
に次のことが発生します: プロセスが手動で強制終了されるまで、ClojureScript はエラーでコンパイルを続けます。一部の相対パスに関連する再帰エラーのようです。
Compiling ClojureScript...
• public/js/main.js
Writing target dir(s)...
java.util.concurrent.ExecutionException: java.nio.file.NoSuchFileException: resources/public/public/public/js/main.out/goog/deps.js
一方、長く実行し続けると、public/public/public/..
展開します。
これを修正できる提案はありますか?
アップデート
質問の更新版は次のとおりです。
次のリソース フォルダーの構造を考えてみましょう。
bash-4.3$ tree
└── private_file.txt
└── public
├── index.html
└── js
└── main.cljs.edn
そして、build.boot の次の部分:
(set-env! :resource-paths #{"resources"} ...)
(deftask dev
[]
(comp
(serve
:handler 'myapp.server/handler
:reload true
:port 3000)
(watch)
(reload)
(cljs-repl)
(cljs)
(target)))
'myapp.server/handler は、resources/public からファイルを提供するだけであることを認識しています (wrap-resource
または同等の構成要素によって実装されていresources
ます。後者はデフォルトで "private" に設定されています。
しかし、問題はさらに早い段階で発生します。リソースディレクトリ全体を実行すると、もちろんboot dev
ターゲットディレクトリに再現されます。private_file.txt
(これは意図された動作ですか? ファイルが非常に大きくなる可能性があり、ディスク容量の 2 倍を消費する可能性があることを意味します)
この時点で、 main 内の :asset-path がこれにどのように影響するかはわかりません。ここの例では、「js/main.out」のままにしていますが、これは間違っている可能性があります。