5

r.js オプティマイザーをサーバー側 ( Apache Sling ) に統合しようとしていますが、1 つの問題に直面しています: モジュールを解決するとき、ソース ディレクトリ(または)内からではなく、常に出力ディレクトリ( dir)の下でそれらを検索します。それらを見つけることができないため、失敗します。baseUrlappDir

/project/build.js

({
    name: "modules/main",
    dir: "/target",
    baseUrl: "/sources"
})

ご想像のとおり、ルート パス/はファイル システムではなく、サーバーの JCR リポジトリ内にあります。また、例を少し単純化しました (うまくいけば、問題を隠すことはありません)。

メインファイルを適切に解決して読み取ります。

/sources/modules/main.js

require(["modules/foo"]);

ただし、解決しようとすると、予想どおりではなく、存在しないものから読み取ろうとし、r.js の実行全体が失敗して停止しますmodules/foo/target/modules/foo.js/sources/modules/foo.js

といろいろな組み合わせを試してみappDirましたが、問題はいつも同じです。私はそれが私の統合コードに関連していないと確信しています...ドキュメントとグーグルでAFAIUを調べてみると、最適化されたファイルを構築する前にそれらをターゲットにコピーするか、ソースディレクトリから自動的にそれらを選択する必要があります。

  • /targetr.js を実行する前に、すべての未加工のソース ファイルを自分自身にコピーする必要がありますか?
  • おそらく問題は、baseUrl=/overlay内部に存在する build.js とは異なること/projectですか?
  • たぶん、r.js は r.js プロセスの現在の作業ディレクトリも参照するのでしょうか (私の場合はまだ定義されていません)。
  • 出力ディレクトリ ( dir) は外部appDirまたはに置くことができますかbaseUrl?
4

2 に答える 2

2

自分自身に答える: orの代わりに使用する単一の出力ファイルアプローチで動作するようになりました:outappDirdir

({
    name: "modules/main",
    baseUrl: "/sources"
    out: "/target/out.js",
})

この場合、ソースからすべてのモジュールを読み取り、完了時/target/out-temp.jsに移動する を作成し/target/out.jsます。

これまでのところ、これは私のニーズに合っているようです。

于 2013-08-17T02:47:33.100 に答える