2013-08-25 11 views
5

Ich verwende r.js Optimierer zu kombinieren js-Dateien basierend auf Build-Profil, wie es in documentation vorgeschlagen wird. Hier ist mein build-config.js:Wie URLArgs aus Build mit r.js auszuschließen

({ 
    baseUrl: ".", 
    paths: { 
     jquery: '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
    }, 
    name: "main", 
    out: "main-built.2013-07-30.js" 
}) 

Wie Sie es basiert auf main.js Datei sehen kann, ist hier ein Code davon:

requirejs.config({ 
    baseUrl: 'scripts', 
    urlArgs: "bust=" + (new Date()).getTime(), 
    paths: { 
     jquery: [ 
      '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 
      'lib/jquery-1.9.1.min', 
     ], 
    }, 
}); 

require([ 
    'layout', 
    'cue', 
], function() { 

}); 

Wenn ich bewahren urlArgs: "bust=" + (new Date()).getTime() in main.js alle externen Dateien (hier jquery, die von CDN geladen wird) aussehen wie .../jquery.js?bust=1377412213

So ist es PITA zu kommentieren diese Linie jedes Mal, wenn ich einen Build mache. Ich habe die gesamte Dokumentation durchgelesen und nach einer Lösung gegoogelt, aber alles umsonst. Vielleicht mache ich es falsch?

Antwort

1

Die folgende Lösung in Ihrem Fall funktionieren würde, in dem Sie die Datei main.js in dem r.js sind die Umbenennung bauen:

urlArgs: require.specified('main') ? "bust="+(new Date()).getTime() : null 

Das obige Snippet für das Modul ‚main‘ genannt überprüfen wird, Das wird in der Entwicklung übereinstimmen, aber nicht in der Produktion, wo das Modul "main-build.2013-07-30" genannt wird.

Ich habe in Entwicklung und Produktion getestet und es funktioniert! :-)

Auf der require.specified() Funktion: With requirejs is it possible to check if a module is defined without attempting to load it?

+1

Ja, das funktioniert. Nach 2 Jahren :) – dVaffection

2

Weise zu spät zur Party auf diesem, aber hier die Lösung, die ich verwendet: Hängen Sie den URLArgs-Parameter an die Konfig mit einem nachfolgenden Aufruf.

HTML:

<script src="js/libs/require.js"></script> 
<script src="js/config.js"></script> 
<script>require(['main-app']);</script> 

Config File:

requirejs.config({ 
    paths: {...}, 
    shim: {...} 
});  

// Apply the cache bust only for the browser. 
if (window) { 
    requirejs.config({ 
    urlArgs: REQUIRE_NOCACHE ? "bust="+(new Date()).getTime() : null 
    }); 
} 

Der Optimierer nimmt nur die erste requirejs.config Erklärung und es ignoriert den nachfolgenden Code. Die zweite requirejs.config-Deklaration wird erweitert, anstatt die erste zu überschreiben. Daher wird urlArgs weiterhin erfolgreich auf Module im Browser angewendet. Ich hoffe, das hilft.

+0

Was ist * REQUIRE_NOCACHE *? – dVaffection

+0

'REQUIRE_NOCACHE' ist nur eine globale boolesche Variable, die ich in meinen Entwicklungsumgebungen deklariere. Wenn es vorhanden ist, stellt es sicher, dass der Cache bei jeder Aktualisierung der Seite gesperrt wird. – Jes

+0

Wie organisieren Sie Ihre Entwicklungs- und Produktumgebungen? – dVaffection

Verwandte Themen