依存関係を読み込むために Require を使用する Web アプリケーションがあります。config.shim
Requireオブジェクトを使用して含まれる一連の JS ライブラリがあります。
そのような 2 つのサンプル ライブラリは次のとおりです。
require.config({
shim: {
"libs/leaflet": {
exports: "L"
}
"libs/leaflet-dvf": {
deps: ["libs/leaflet"],
exports: "L"
}
}
2 番目のライブラリにleaflet-dvf
は、最初のleaflet
. L
2 番目は、最初のライブラリが定義するグローバル スコープ変数に依存する最初のプラグインです。
通常、Require を使用してアプリケーションを実行すると、すべて正常に動作します。シムからいずれかのライブラリを含めることができ、すべてがうまく機能します。問題はありません。
このコードを Require r.js Optimizer で実行すると問題が発生します。Optimizer は、単一の最適化された JS ファイルをビルドするときに、依存関係を誤って順序付けます。ビルドされたファイルでは、leaflet-dvf
コードはコードの前に来leaflet
ます。これにより、依存プラグインL
が必要なグローバル スコープ変数を見つけることができないため、JS ランタイム エラーが発生します。
私のビルド構成は次のようになります。
({
baseUrl: "../js",
paths: {
"requireLib": "../js/libs/require"
},
include: ["requireLib"],
name: "Main",
out: "bin/Main-built.js",
optimize: "none",
wrapShim: true
})
Rhino を使用して Optimizer を実行すると、出力ファイルが作成されます。Main-built.js
ファイルでは、プラグインのコードが必要なライブラリの前に来ます。これにより、L undefined error
.
最適化された JS ファイル内のライブラリ ファイルを適切に並べ替えるために、オプティマイザーが Shim の依存関係の順序を尊重するようにするにはどうすればよいですか?