11

私は単純なDojoアプリケーションを持っています。これは、1回のrequire呼び出しだけで、すべての依存関係をロードします。問題は、それが非常に単純であるにもかかわらず、それでもサーバーから最大100個のファイルをロードすることになるということです。Dojoビルドシステムを使ってその問題を解決しようとしましたが、十分に理解していないようです。

だから私の質問は-次のような依存関係のリストが与えられた場合です:

["dojo/parser",
 "dijit/registry",
 "dojo/dom",
 "dojo/on",
 "dojo/query",
 "dojo/dom-class",
 "dojo/request",
 "dijit/form/ValidationTextBox", 
 "dijit/form/Select",
 "dijit/form/NumberSpinner",
 "dijit/form/CheckBox",
 "dijit/layout/ContentPane",
 "dijit/Dialog",
 "dojo/NodeList-traverse",
 "dojo/domReady"]

単一ファイル(または100ファイルではなく複数ファイル)のdojoファイルを作成するようにビルドを設定するにはどうすればよいですか?

4

2 に答える 2

5

Dojoのrequire()ローダーを使用している場合は、ファイルを結合して縮小するために使用できるビルドツールがあります。サイトによると、ビルドツールは公式リリースに含まれていないため、開発バージョンから入手する必要があります(具体的には、buildscriptsディレクトリを確認してください)。

Dojoのドキュメントには、ビルドシステムに関する情報が含まれています。

概念実証として、これが私が取ったステップです:

  1. ダウンロードページに移動し、Source Dojo Toolkit SDKをダウンロードします(ビルドに必要なutilスクリプトが含まれているのはこれだけです)。

  2. 場所に抽出します(この投稿のために、それがそうだとしましょう/opt/dojo-toolkit)。

  3. Dojoツールキットディレクトリ(つまり/opt/dojo-toolkit)から、build utilを実行します:(./util/buildscripts/build.sh action=release htmlFiles=/path/to/my/index.html注意してください、これは私の5歳のデュアルコアをクロールするのに遅くなりました)

index.html(これはdojo-toolkitディレクトリ内にあります):

...
<head>
    <script src="dojo/dojo.js"></script>
    <script>
    dojo.require("my.test");
    </script>
</head>
...

呼び出しはrequire()ネストされたモジュールを探します(トップレベルのモジュールで動作させることができませんでした)。したがって、この場合、ファイルを含むmyディレクトリがあります。そのファイルは、すべての依存関係をロードするメインの「ブートストラップ」ファイルです。私はランダムな呼び出しを私の中に入れました:dojo-toolkittest.jsrequire()

dojo.require('dijit.ProgressBar');
dojo.require('dijit.Tree');

そして、それはそれを行う必要があります。基本的に、HTMLファイル(dojo.jsへの参照を含むファイル)に対してビルドユーティリティを実行すると、すべての依存関係が上から順に検出されます。

:ビルドシステムはビルドreleaseされた出力でディレクトリを作成しますが、最初は少し誤解を招くように見えます-個々のファイルを縮小したように見えますが、実際のブートストラップファイル(my/test.jsこの場合)を見ると、アプリを実行するために必要なすべてのものを含む、結合された縮小ファイル(私は推測します)。


それ以外の場合、AMDスタイルを使用している場合require()(require.jsのように)、その最適化ツールを使用できます。サイトによると、それは:

  1. すべての依存ファイル(require.js自体を含む)を1つのファイルに結合します。呼び出しを分析して、require()組み合わせる必要のあるファイルを特定します。

  2. UglifyJS(デフォルト)またはClosureCompilerを使用してJavaScriptを縮小します。

于 2012-12-13T06:06:58.330 に答える
3

私は同じことをする必要がありました、そしてこれは私がそれを解決した方法です。

カスタムビルドの作成方法に関するドキュメント( http://dojotoolkit.org/documentation/tutorials/1.8/build/ )を読むと、レイヤーセクションでカスタムレイヤーの作成について説明しています。そこに必要なすべてのモジュールを追加できます。これが私のカスタムレイヤーファイルの例です:

layers : {
"dojo/dojo" : {
    include : [
            "dojo/dojo",
            "dojo/_base/window",//
            "dojo/dom",//
            "dojo/dom-class",//
            "dojo/ready",//
            "dojo/store/Memory"
    ],
    customBase : true,
    boot : true
}
}

これにより、これらのモジュールのみがブートストラップローダーとともにdojo.jsにビルドされ、他のモジュールをその場でロードできるようになります。

于 2012-12-14T18:06:01.217 に答える