使用具有唯一CDN的require.js

时间:2016-03-15 15:13:35

标签: javascript backbone.js internationalization requirejs

我正在使用require.js应用程序进行本地化。我们将nls文件放在特定的文件夹结构中。

my $parent = 'D:/Cleaned 10Ks';

while ( my $subdir = glob "$parent/*" ) {

    next unless -d $subdir;

    my @files = grep -f, glob "$subdir/*";
}

当我们将应用程序推向生产时,我们的构建系统会为所有文件添加内部版本号,例如nls/ fr/ register.js ... register.js 这可以在我的机器上本地工作,因为我们不添加唯一编号。

Require.js不会在子文件夹中引入任何js文件,例如nls / fr / register.js将不会加载到main.js包中(预期)。当我们的应用程序遇到这个阶段时,它会从CND中拉出nls / fr / register.js但是会查找nls / fr / register.js而不是nls / fr / register.54b8801bf2c6e13b.js(是的文件存在于我们的CDN中

有没有人知道动态地让require.js寻找nls / fr / register.54b8801bf2c6e13b.js的方法。我想我们之前没有遇到过这种情况,因为所有的JS文件都被加载到main.js文件中(我不反对在这里做,如果它更容易的话)

NLS / register.js

main.54b8801bf2c6e13b.js​​

NLS / FR / register.js

define(['text!json/root/register.json', 'settings'], function(json, settings) {
    return {
        "fr": true
    }
});

视图/ register.js

define(['text!json/fr/register.json'], function(json) {
    return JSON.parse(json);
});

1 个答案:

答案 0 :(得分:1)

我通过我的grunt任务(grunt-contrib-requirejs)将NLS文件添加到我的require.js编译文件(main.js)来解决这个问题

modules: [
          {
            name: 'main',
            include: [
              'nls/de/activity_types',
              'nls/de/admin',
              'nls/de/app_callout',
              'nls/de/browser_support'
               ]
            }]