我正在编写一个使用托管的dojo api的应用程序。我正在使用AMD编写我的应用程序的其余部分,以便与Dojo的amd loader完美匹配。我想使用dojo提供的一些AMD加载插件,特别是dojo / i18n进行翻译/
从源代码工作得很好,但是当我尝试优化代码时,我得到“TypeError:无法读取未定义的属性'normalize'。”我知道它正在尝试加载插件并检查normalize(),但该插件仅托管且无法下载。
我希望在优化代码时忽略此插件,并在运行时需要正确的转换文件。
答案 0 :(得分:1)
我知道这个问题,在我的情况下,我遇到麻烦,让事情与dojo / text一起工作。 要解决它,请尝试以下操作:
在GitHub上获取i18n的requirejs版本https://github.com/requirejs/i18n/blob/master/i18n.js
将其包含在您的项目中。最好将它放在未部署的子文件夹中。在我的情况下,它的./libs/build/i18n.js(不用担心,它只用于优化,不会替换dojo / i18n)
转到build.js(build位于./build.js)并将以下项添加到路径中:
paths: {
dojo: "empty:",
dojox: "empty:",
i18n: "./libs/build/i18n"
}
转到您有需求的索引文件(或将其添加到dojo.config)并添加新别名:
require({
aliases:[["i18n", "dojo/i18n"]]
},
["..."],
function(...){});
用i18n!nls / strings.js替换你的应用程序中每个出现的dojo / i18n!nls / strings.js,所以实际上会使用别名。
define(["dojo/i18n!./nls/strings.js"], function (nls)
替换为
define(["i18n!./nls/strings.js"], function (nls)
在第5步之后,requirejs将识别i18n的requirejs-version并且实际上可以调用normalize。但是你的应用程序仍将使用dojo / i18n,因为它隐藏在别名中。
希望这会有所帮助。