2013-08-27 7 views
16

Ich habe einen Backbone-App, die RequireJS verwendet 2.1.8 (das heißt, alle meine Backbone Ansichten definieren() verwenden, die Abhängigkeiten angeben). Alles funktioniert gut und jetzt versuche ich r.js (installiert über NPM) zu verwenden, um all mein JavaScript in eine einzige Datei zu konvertieren.RequireJS: Wie bestimmte Pfade ausgeschlossen werden, wenn in eine einzelne Datei gebaut wird?

Wie kann ich eine r.js-Konfiguration einrichten, die Abhängigkeiten ausschließt, die mit bestimmten Pfaden beginnen?

Ich habe meine main.js enthalten Datei unten. In diesem Fall möchte ich, dass die "eingebaute" Ausgabedatei die Bibliotheken von Drittanbietern ausschließt (d. H. Jquery, Backbone usw.). Außerdem mag ich irgendeine Abhängigkeit auszuschließen, die mit „webapp /“ beginnt (zum Beispiel „webapp/dynamic_cfg“, die in einer Anfrage dazu führt, dass für eine dynamisch generierte JavaScript-Datei/Modul meine Djang App gesendet).

Ordnerstruktur:

|--static/ 
    |--main.js 
    |--myapp/ 
     |--views/ 
      |-- MyView.js 
      |-- ... 
    |--lib 
     |--backbone-1.0/ 
     |--underscore-1.5.1/ 
     |-- ... 

index.html (a Django Vorlage):

<script src="{% static 'lib/requirejs-2.1.8/require.min.js' %}" data-main="{% static 'main.js' %}" ></script> 

main.js:

requirejs.config({ 

    paths: { 
     "jquery": 'lib/jquery-1.10.2/jquery.min', 
     "text_loader": 'lib/requirejs-text-2.0.10/requirejs-text', 
     "fuelux": 'lib/fuelux-2.3.1', 
     "backbone": 'lib/backbone-1.0/backbone.min', 
     "underscore": 'lib/underscore-1.5.1/underscore.min', 

     // Any module that requires 'webapp/*' will result Require.js 
     // making a request to the server webapp. 
     "webapp": '..' 
    }, 

    shim: { 

     'backbone': { 
      deps: ['underscore', 'jquery'], // Load these dependencies first 
      exports: 'Backbone' // Create global var with this name for the module 
     }, 
     'underscore': { 
      exports: '_' 
     } 
    } 

}); 

// Startup 
require(['webapp/dynamic_cfg', 'myapp/util/logger', 'myapp/view/AppView', 'myapp/AppRouter', 'fuelux/all'], 

    // Dependencies are loaded and passed to this function 
    function(cfg, logger, AppView, AppRouter, fuelUx) { 

     logger.info("Starting up with config:", cfg); 

     var appView = new AppView(); 
     var appRouter = new AppRouter(); 
    } 
); 
+0

Hat entweder [diese] (http://stackoverflow.com/questions/17171133/exclude-all-starting-with-x-in-requirejs-module) oder [dies] (http://stackoverflow.com/questions/9219113/requirejs-optimize-tool-exclude-folders) decken, was Sie brauchen? – explunit

Antwort

30

die Pfade Einstellung auf "leer" in Meine r.js Konfiguration hat funktioniert. Beispiel:

// This is a RequireJS config file 
(function(){ 
    return { 

     // Name of input file (without the .js extention) 
     "name": "main", 

     // Directory containing input file 
     "baseUrl": "static/", 

     // Look in this file for the require.config() call and extract it 
     "mainConfigFile": "static/main.js", 

     "paths": { 
      // Don't attempt to include dependencies whose path begins with webapp/ 
      "webapp": "empty:", 

      // Ditto for the following 3rd-party libraries 
      "jquery": "empty:", 
      "fuelux": "empty:", 
      "backbone": "empty:", 
      "underscore": "empty:" 
     }, 

     "optimize": "uglify2", 
    }; 
})() 
+1

Funktioniert nicht 'Grunzen-contrib-requirejs' mit Grunzen CLI v0.1.9 und Grunzen v0.4.2. – kaiser

+1

Grunzen v0.4.5 + Grunzen-contrib-requirejs v0.4.4 Werke – johnr

Verwandte Themen