0

私のHTMLファイルbuildCheck.html

<SCRIPT src="/dojo/dojo.js"></SCRIPT>
<SCRIPT>
    dojo.require("dijit.form.Button");
    dojo.require("dijit.form.CheckBox");
    dojo.require("dijit.form.ComboBox");
    dojo.require("dijit.Dialog");
    dojo.require("dojo.data.ItemFileReadStore");
     dojo.require("my.app");

</SCRIPT>  

指示 :

>build.bat action=release htmlFiles=../../buildCheck1.html profile=myProfile

エラー :

kwArgs.htmlFiles ../../buildCheck1.html
release:  Using profile: profiles/myProfile.profile.js
release:  Using version number: 0.0.0.dev for the release.
release:  Deleting: ../../release/dojo
release:  Copying: ../dojo/../dijit to: ../../release/dojo/dijit
release:   ********** Not Copied: ../dojo/../dijit
release:  Copying: ../dojo/../dojox to: ../../release/dojo/dojox
release:   ********** Not Copied: ../dojo/../dojox
release:  Copying: ../dojo to: ../../release/dojo/dojo
release:   ********** Not Copied: ../dojo
release:  Building dojo.js and layer files
js: "./../../dojo/_base/_loader/loader.js", line 423: exception from uncaught Ja
vaScript throw: Error: Could not load 'dojo.i18n'; last tried '../../release/doj
o/dojo/i18n.js'

以下のコンポーネントを追加すると、このエラーが発生します

dojo.require("dojo.data.ItemFileReadStore")

削除後、コンポーネントのビルドは正常に機能しています。

何が問題なのですか?このエラーを回避するには何を追加すればよいですか?

4

2 に答える 2

0

ファイルをどのように整理したかはわかりませんが、私の場合は次のように整理しました。

- js
  - dojo_require.js (the file with "dojo.require" statements, just like your "buildCheck.html")
  - dojo-release-1.6.1-src (dojo files)
    - dijit
    - dojo
    - dojox
    - util
      - buildscripts
    - release

そして、私はまったく同じ問題に直面しました。HTMLファイルにrequire「dojo」フォルダーから何かをロードするものが含まれている場合、これが発生することがわかりました。dojo.require("dijit.<*>")問題dojo.require("dojox.<*>")ありませんdojo.require("dojo.<*>")が、ビルド スクリプトが Dojo への不適切な相対パスを使用する原因となります。私はあなたと同じ出力を得ていました:

release:  Deleting: ../../release/dojo
release:  Copying: ../dojo/../dijit to: ../../release/dojo/dijit

Copying: ../../dojo/../dijit to: ../../release/dojo/dijitしかし、私は代わりに次のようなものを持っているべきでした。1つ../欠けていました。

現在、これはおそらくバグです (詳しく調査するのが面倒です)。1.6 はかなり古いバージョンの Dojo であるため、正しい修正はアップグレードすることです。しかし、場合によってはあまりにも面倒なので、ビルドスクリプトを実行して終了できるようにするための汚いハックを次に示します。

dojo-release-1.6.1-src/util/buildscripts/build.jsの 107 行目に、次の行を追加します。

prefixPath = '../' + prefixPath;

コードのブロック全体は次のようになります。

for(var i = 0; i < prefixes.length; i++){
    var prefixName = prefixes[i][0];
    var prefixPath = prefixes[i][1];
    prefixPath = '../' + prefixPath; // HACK!
    var finalPrefixPath = prefixPath;
    if(finalPrefixPath.indexOf(".") == 0 && prefixName != "dojo"){
        finalPrefixPath = dojoPrefixPath + "/" + prefixPath;
    }
    _copyToRelease(prefixName, finalPrefixPath, kwArgs, buildLayers);

    if(kwArgs.symbol){
        var releasePath = kwArgs.releaseDir + "/"  + prefixName.replace(/\./g, "/");
        buildUtil.insertSymbols(releasePath, kwArgs);
    }
}
于 2015-04-08T10:40:02.803 に答える
0

エラーが発生した時点では、dojo/i18n はまだビルドされていないようです。dojo.data に注目するとローカリゼーションが必要になるため、それが ItemFileReadStore であるとあなたが言うのは私には奇妙に思えます。

手動の dojo.require("dojo.i18n"); を追加してみてください。任意の dijit reqs の上の .html に

于 2012-06-07T21:57:44.797 に答える