2013-07-19 11 views
9

È possibile impostare le dipendenze per un'intera cartella utilizzando require.js?È possibile impostare le dipendenze per una cartella usando require.js?

So che è possibile utilizzare la configurazione di spessore per impostare le dipendenze per un file:

require.config({ 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

Nell'esempio di cui sopra mi definisco le dipendenze per il plugin backbone/xyz, ma vorrei definire le dipendenze per tutti i plugin di dorsale:

require.config({ 
    shim: { 
     'plugin/backbone/': { // I would like to specify a folder here but it doesn't work. 
      deps: ['lib/backbone'], 
      exports: 'Backbone' 
     } 
    } 
}); 

Penso che una volta ho trovato un succo su di esso su GitHub, ma io non riesco a trovare di nuovo.


per chiarire: Non si tratta di richiedere un'intera cartella, ma l'impostazione dipendenze per esso - Quello che tutti i file nella cartella ha bisogno prima che siano pronti per inizializzare, ciascuno e uno di loro. Sarebbe essere realizzato con l'aggiunta di spessori per tutti i file, ma vorrei avere solo aggiungere che shim una volta per l'intera cartella:

shim: { 
    'lib/backbone': { 
     exports: 'Backbone' // <- No use of .noConflict() so all plugins can be required and export Backbone as well. 
    }, 
    'plugin/backbone/a': { 
     deps: ['lib/backbone'], // <- Require backbone 
     exports: 'Backbone' // <- Export backbone 
    }, 
    // Same requirement and folder for these files: 
    'plugin/backbone/b': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }, 
    'plugin/backbone/c': { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    } 
} 
+0

Questa sarebbe una grande caratteristica. Soprattutto se sto usando qualcosa come Angular, che ha un sacco di controller, servizi, ecc. Sarebbe bello dire solo che la mia cartella "app" dipende da angolare. –

risposta

2

No, non è possibile creare facilmente un jolly per aggiungere le dipendenze a tutti i file sotto una cartella dalla configurazione stessa. Puoi comunque creare un ciclo prima della configurazione e aggiungere tutte le dipendenze che desideri.

var config = { 
    shim: { 
     'plugin/backbone/xyz': { 
      deps: ['lib/dependency'], 
      exports: 'Backbone' 
     } 
    } 
}; 
for(var shim in config.shim) { 
    if(shim.indexOf('plugin/backbone/') == 0) { 
     if(config.shim[shim].deps == null) { 
      config.shim[shim].deps = []; 
     } 
     config.shim[shim].deps.push('lib/backbone'); 
    } 
} 
require.config(config); 

Questo è l'unico modo in cui riesco a pensare senza dover ignorare una delle funzioni richieste dall'utente. Non elegante, lo ammetterò, ma farà il lavoro.

+0

Dovresti rimuovere 'each' dopo' for': 'for (var shim in config.shim) {}' – andlrc

+0

Ah, scusa, stavo pensando al actionscript. Fisso. –

1

Ispirato @J_A_X's answer

È possibile effettuare una serie di file che devono condividere le stesse dipendenze e creare lo spessore in modo dinamico:

var config = { shim: { /*...*/ } } 

var plugins = ['a', 'b', 'c', 'd'], 
    plugin_shim = { 
     deps: ['lib/backbone'], 
     exports: 'Backbone' 
    }; 

plugins.forEach(function(file) { 
    config.shim['plugin/backbone/' + file] = plugin_shim; 
}); 

require.config(config); 

Ma questo non avrebbe funzionato molto bene se qualcuno avrebbe minuglify utilizzando r.js

Problemi correlati