RequireJS 优化忽略插件

RequireJS Optimer Ignore Plugins

我正在编写一个使用托管的 dojo api 的应用程序。我正在使用 AMD 编写我的应用程序的其余部分,以很好地适应 Dojo 的 amd 加载程序。我想使用dojo提供的一些AMD加载插件,具体是dojo/i18n for translation/

从源头上运行良好,但每当我尝试优化代码时,我都会得到 "TypeError: Cannot read property 'normalize' of undefined." 我知道它正在尝试加载插件并检查 normalize(),但该插件仅托管,不能待下载。

我希望在优化代码时忽略此插件,并在运行时要求正确的翻译文件。

我知道这个问题,就我而言,我在使用 dojo/text 时遇到了麻烦。 要解决它,请尝试以下操作:

  1. 在 GitHub https://github.com/requirejs/i18n/blob/master/i18n.js

  2. 上获取 i18n 的 requirejs 版本
  3. 将其添加到您的项目中。最好将它放在未部署的子文件夹中。在我的例子中是 ./libs/build/i18n.js(别担心,它只用于优化,不会替换 dojo/i18n)

  4. 转到 build.js(构建位于 ./build.js)并将以下项目添加到路径:

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

    require({
         aliases:[["i18n", "dojo/i18n"]]
    }, 
    ["..."], 
    function(...){});
    
  6. 用 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 版本,并且可以实际调用 normalize。但是您的应用仍将使用 dojo/i18n,因为它隐藏在别名中。

希望这会有所帮助。