Dojo自定义生成错误

时间:2012-06-07 08:49:30

标签: build dojo

我的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")

删除后,组件构建工作正常。

可能是什么问题?我应该添加什么来避免此错误?

2 个答案:

答案 0 :(得分:0)

看起来错误发生时,还没有构建dojo / i18n。对我来说这似乎很奇怪,你说它是ItemFileReadStore - 因为在dojo.data中注意需要本地化。

尝试添加手动dojo.require(“dojo.i18n”);到您的.html以上任何dijits reqs

答案 1 :(得分: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.6是一个相当旧的dojo版本,正确的修复应该是升级。但是因为在某些情况下,这太痛苦了,这是一个肮脏的黑客,使我的buildcript可以运行和完成:

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);
    }
}
相关问题