2016-10-24 4 views
0

gegeben, diese requirejs config:Wie die CDN-URL vorangestellt Pfade in einem Build-Skript requirejs

require.config({ 
    baseUrl: './js', 
    paths: { 
    'jquery': 'vendor/jquery', 
    'bootstrap': 'vendor/bootstrap', 
    'basicModel': 'app/models/basicModel', 
    'aboutModel': 'app/models/aboutModel', 
    'contactModel': 'app/models/contactModel', 
    'models': 'models', 
    'vendor': 'vendor' 
    }, 
    shim: { 
    'bootstrap': ['jquery', 'models'] 
    } 
}); 

ich meine Automatisierungsskript möchte, dass ein Paket für die Produktion vorbereitet jeden der Werte innerhalb des paths Objekt abzubilden wie die folgenden:

'jquery': [cdnUrl + 'vendor/jquery', 'vendor/jquery'], 

wie Sie sehen können, ist die cdnUrl eine tatsächliche Variable, die meinen CDN Endpunkt zur Laufzeit halten werden. Der Endpunkt kann nicht zur Erstellungszeit bestimmt werden, wenn dieses Skript ausgeführt werden soll.

Wie kann ich diese Art von Mapping machen?

EDIT:

Ich will nicht regex in diesem Fall verwenden, da meine wirkliche require.config.js Datei aufgrund größer und komplizierter ist mehr andere Eigenschaften als paths zu haben, die die gleiche Syntax haben.

Ich habe ein Skript, das die obige Konfiguration mit requirejs-config-file npm-Paket analysiert und im Grunde macht dies zu einem echten Objekt. Ich kann einfach nicht herausfinden, ob das, was ich frage, in JavaScript-Code (nicht Textbearbeitung) möglich ist.

+0

Sie wollen etwas wie 'Pfade ['jquery'] = [cdnUrl + Pfade ['jquery'], Pfade ['jquery']]'? –

+0

ja. Wie kann dies erreicht werden? – johni

+1

Der Titel zu dieser Frage ist wirklich unklar; Ich sehe nicht, was das mit variablen Namen und Werten oder Mapping zu tun hat. – Retsam

Antwort

1

So ähnlich?

var config = { 
     baseUrl: './js', 
     paths: { 
      'jquery': 'vendor/jquery', 
      'bootstrap': 'vendor/bootstrap', 
      'basicModel': 'app/models/basicModel', 
      'aboutModel': 'app/models/aboutModel', 
      'contactModel': 'app/models/contactModel', 
      'models': 'models', 
      'vendor': 'vendor' 
     }, 
     shim: { 
      'bootstrap': ['jquery', 'models'] 
     } 
}; 

for(var path in config.paths){ 
    var pathValue = config.paths[path]; 
    config.paths[path] = [cdnUrl + pathValue, pathValue]; 
} 
console.log(config.paths); 
+0

dies wird nicht funktionieren, da 'cdnUrl' ausgewertet wird. Ich kenne nur seinen Wert zur Laufzeit, nicht zur Build-Zeit. – johni

+0

Vielleicht ein http-Aufruf für den Wert, oder vielleicht aus einer anderen Quelle lesen? Vielleicht funktioniert eine Funktion, die mit dem Versprechen arbeitet, die Werte zu aktualisieren, wenn 'cdnUrl 'bereit ist –

+0

, wenn ich den endgültigen Wert genau so haben könnte:'' jquery ': [cdnUrl +' vendor/jquery ',' vendor/jquery '] , '- das würde funktionieren. Aber wenn ich mir mehr Gedanken mache, sieht es unmöglich aus. – johni

Verwandte Themen