2016-04-04 3 views
0

Ich habe ein großes clientseitiges Projekt in AngularJS geschrieben, das RequireJS zum Laden von asynchronen Modulen verwendet.RequireJS - Laden von Nicht-Skriptdateien mit CDN

Viele meiner Angular-Richtlinien verwenden, um ihre eigenen HTML und CSS. Zum Beispiel:

define(function (require) { 
    require('css!path/to/directive-name.css'); 
    app.directive('directive-name', function() { 
     return { 
      restrict: 'E', 
      template: require('text!path/to/directive-name.html'), 
      controller: function ($scope) { 
       // code 
      } 
     }; 
    }); 
}); 

In diesen Tagen wir machen meine Anwendung Arbeit mit einem CDN-Dienst arbeiten. Also für alle die JavaScript-Dateien habe ich geändert, um die require.config.js-Datei:

paths: { 
     app: [ 
      '//cdn.domain.net/path/to/main', 
      'main' 
     ], 
} 

Aber es gibt viele Richtlinien, die bei der Inbetriebnahme Seite meiner Anwendung geladen werden, und für jeden von ihnen gibt es zwei Dateien (CSS, HTML), die von meinem Ursprungsserver und nicht vom CDN geladen werden.

In welcher Weise könnte ich die Datei require.config.js ändern, damit der Browser die htmls, css vom CDN-Server holt?

Gibt es eine Option, die für jede-Datei, die requir'ed Wesen - der Browser es aus dem CDN holen wird und zu meinem Ursprungsserver bei CDN Ausfall Rückfall obwohl nicht explizit in require.config.js erwähnt?

Antwort

0

Es gibt path fallbacks. Sie müssen Ihrer Abhängigkeit eine ID zuweisen und diese ID so definieren, dass zuerst eine Pfadzuordnung mit CDN, dann die lokale Sekunde erfolgt. Leider müssen Sie dies für jede Ihrer Abhängigkeiten tun.

Auf der anderen Seite betrachten RequireJS Optimierer zu bündeln Ihre Anwendung in eine Datei oder ein Bündel von ihnen, und CDN stattdessen diese Dateien verwenden. Auf diese Weise müssen Sie nicht jede einzelne Ihrer Abhängigkeiten identifizieren.

+0

Ich bündeln alle Dateien RequireJS Optimierer verwenden, aber das dauert nicht die CSS und HTML-Vorlagen und fügt sie in der mitgelieferten Datei. Was kann ich tun, um diese XHR-Aufrufe zum Abrufen dieser Dateien zu speichern? – johni

+0

@johni Soweit ich weiß, müssen Sie auch bei Verwendung des Bundles immer noch eine Konfigurationsdatei verwenden. Wenn ich mich richtig erinnere, habe ich die selbe Konfigurationsdatei für die Produktion verwendet, die diese Mappings hat. Load RequireJS, dann die Config, dann das Bundle. – Joseph

+0

Das gilt auch für meinen Fall, ich benutze die selbe Konfigurationsdatei. Aber ich sehe nicht, wie kann ich verlangen, dass relative-Path-Dateien von der vorkonfigurierten CDN holen. Ich kann keine ID zu 100+ Direktiven benennen und sie zur Konfigurationsdatei hinzufügen, das ist verrückt. Ich hatte gehofft, dass es einen anderen Weg gibt – johni