2014-10-17 7 views
13

Sto cercando di require un file con browserify utilizzando variabili passate in una funzione:richiede in browserify non funziona nome di variabile

var playersOptions = { 
    name: 'players', 
    ajax: 'team-overview', 
    route: { 
     name: 'overview', 
     path: 'playersOverview', 
     url: 'playersoverview' 
    } 
}; 

var BackboneView = require(playersOptions.route.path); 
//Error: Uncaught Error: Cannot find module 'playersOverview' 

var BackboneView = require('playersOverview'); 
//Requires the file without any problems. 

Sono confuso sul motivo per cui questo sarebbe fallire? Come può non trovare il modulo quando entrambe sono stringhe?

risposta

18

Browserify deve essere in grado di analizzare staticamente tutte le istruzioni necessarie al momento della compilazione in modo che possa sapere quali file deve includere nel pacchetto. Ciò richiede che require possa essere utilizzato solo con una stringa letterale nel codice sorgente.

Invece di passare il nome di un modulo intorno a richiedere più tardi, basta passare il modulo stesso.

var playersOptions = { 
    name: 'players', 
    ajax: 'team-overview', 
    route: { 
     name: 'overview', 
     module: require('playersOverview'), 
     url: 'playersoverview' 
    } 
}; 

var BackboneView = playersOptions.route.module; 

Anche se questa limitazione Browserify non era presente (ad esempio, se si sta utilizzando node.js direttamente), è comunque consigliabile evitare di far passare i nomi dei moduli in seguito perché la chiamata require potrebbe interrompersi se il nome del modulo passato ha un percorso relativo alla directory del chiamante e passato al codice in un file all'interno di una directory diversa.

+0

Arghhh sei un genio sanguinario !!! È fantastico! 'Logic' :) –

Problemi correlati