2015-11-03 55 views
0

我正在编写一个使用托管的dojo api的应用程序。我正在使用AMD编写我的应用程序的其余部分,以便与Dojo的amd加载器很好地配合。我想使用dojo提供的一些AMD加载插件,特别是用于转换的dojo/i18n/RequireJS Optimer忽略插件

从源代码很好地工作,但任何时候我尝试优化代码,我得到“TypeError:无法读取属性'normalize'未定义的“。我知道它试图加载插件并检查normalize(),但该插件仅托管且无法下载。

我希望这个插件在优化代码时被忽略,并且在运行时需要正确的翻译文件。

+0

是[“空:”元路径](http://requirejs.org/docs/optimization.html#empty)你在找什么? – kryger

回答

1

我知道这个问题,在我的情况下,我有麻烦得到与道场/文本的工作。 为了解决这个问题尝试以下操作:

  1. 获取国际化的requirejs版本在GitHub上https://github.com/requirejs/i18n/blob/master/i18n.js

  2. 它列入到您的项目。最好的办法是将其放置在未部署的子文件夹中。在我的情况下它的./libs/build/i18n.js(不用担心,它只用于优化,不会替换dojo/i18n)

  3. 转到build.js(build位于./build。 JS)出发,按照项目添加到路径:

    paths: { 
        dojo: "empty:", 
        dojox: "empty:", 
        i18n: "./libs/build/i18n" 
    } 
    
  4. 前往您有需要的索引文件(或将其添加到dojo.config),并添加新的别名:

    require({ 
        aliases:[["i18n", "dojo/i18n"]] 
    }, 
    ["..."], 
    function(...){}); 
    
  5. 用i18n!nls/strings.js替换应用程序中出现的每个dojo/i18n!nls/strings.js,这样一来lias将被实际使用。

    define(["dojo/i18n!./nls/strings.js"], function (nls) 
    

    更换

    define(["i18n!./nls/strings.js"], function (nls) 
    

步骤后5 requirejs会认识到国际化的requirejs版本,可以实际调用正常化。但是你的应用仍然会使用dojo/i18n,因为它隐藏在别名中。

希望这会有所帮助。

+0

谢谢,这让我非常接近。我优化后,我仍然得到dojo/i18n的multipleDefine错误(一切仍然有效)。我认为这是因为它与主API打包在一起,添加别名会再次尝试定义它。我通过删除别名和切换i18n来解决这个问题!回到dojo/i18n!在我的构建过程中优化应用后。 – ssylviageo

+0

我记得我也有多个定义。但我不记得确切的解决方案。如果一切看起来正确,请检查您的结果app.js。也许尝试build.js =>优化:“无”并再次检查。只要组件dojo/i18n没有定义两次,它应该真正的工作没有解决方法。 (也许尝试dojoConfig = {async:false}以及... –