2013-08-27 13 views
16

Ho un'app Backbone che utilizza RequireJS 2.1.8 (ad esempio, tutte le mie viste Backbone usano define() per specificare le loro dipendenze). Tutto funziona alla grande e ora sto cercando di usare r.js (installato tramite NPM) per concat/minimizzare tutto il mio JavaScript in un singolo file.RequireJS: come escludere determinati percorsi quando si crea un singolo file?

Come posso impostare una configurazione r.js che esclude le dipendenze che iniziano con determinati percorsi?

Ho incluso il mio file main.js di seguito. In questo caso, voglio che il file di output "costruito" escluda le librerie di terze parti (ad es. Jquery, backbone, ecc.). Inoltre, voglio escludere qualsiasi dipendenza che inizia con "webapp /" (ad esempio "webapp/dynamic_cfg", che risulta in una richiesta inviata alla mia app Djang per un file/modulo JavaScript generato dinamicamente).

struttura di cartelle:

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

index.html (un modello di Django):

<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

Fa sia [questo] (http://stackoverflow.com/questions/17171133/exclude-all-starting-with-x-in-requirejs-module) o [questo] (http://stackoverflow.com/questions/9219113/requirejs-optimize-tool-exclude-folders) copre ciò che ti serve? – explunit

risposta

30

Impostazione dei percorsi di "vuoto" in la mia configurazione di r.js funzionava. Esempio:

// 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

Non funziona 'grunt-contrib-requirejs' con grunt CLI v0.1.9 e grunt v0.4.2. – kaiser

+1

grunt v0.4.5 + grunt-contrib-requirejs v0.4.4 funziona – johnr

Problemi correlati