使用 require.js 和唯一的 CDN

Using require.js with a unique CDN

我正在开发 require.js 应用程序以对其进行本地化。我们的 nls 文件位于特定的文件夹结构中。

nls/
   fr/
     register.js
   ...
   register.js

当我们将应用程序推送到生产环境时,我们的构建系统会像这样 main.54b8801bf2c6e13b.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

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

nls/fr/register.js

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

views/register.js

 define([
  'jquery',
  'plugins/ui.1.11.0',
  'underscore',
  'backbone',
  'views/base_view',
  'settings',
  'utils/gtm',
  'utils/storage',
  'text!templates/login_registration/registration_modal.html',
  'i18n!nls/register'
], function($, jquery_ui_is_jquery_plugin, _, 
  Backbone,
  BaseView,
  Settings,
  gtm,
  Storage,
  Template_Registration,
  RegisterLocales) {
//code to get locales and set up view
}

我通过我的 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'
               ]
            }]