2013-03-17 7 views
16

Desidero utilizzare Browserify per raggruppare i miei file, ma ho quindi bisogno di richiedere uno dei moduli all'interno del mio Browserify in bundle bundle.js sulla pagina HTML stessa. Al momento non è possibile perché non esiste una funzione require definita nella pagina.Global require con Browserify v2

Sembra che la funzione require definita da browserify in bundle.js sia all'interno di un IIFE, quindi non posso utilizzarla. È possibile lanciare questo al posto di uno globale require?

<script src="bundle.js"></script> 
<script> 
    // Require the `app` module inside of `bundle.js` 
    var app = require('app'); 
    app.start(); 
</script> 

Ho bisogno di fare questo perché la mia funzione app.start richiede una certa JSON viene passato ad esso, che può essere reso solo dal modello di server-side.

N.B. Sto usando Browserify v2.

risposta

32

È possibile utilizzare -r-expose a global require() funzione per i file specificati:

x.js:

module.exports = function (n) { return n * 111 } 

Console

$ browserify -r ./x.js > bundle.js 

poi nel tuo html:

<script src="bundle.js"></script> 
<script> 
    var x = require('./x.js'); 
    console.log(x(3)) 
</script> 

stamperà 333.

Nel tuo caso, basta fare browserify -r app per esporre require('app') al contesto esterno.

+2

Grazie per questo. Stranamente se si passa un URL relativo come 'x.js' invece di'./X.js', si sbaglia con 'TypeError: Not a string o buffer' –

+0

Devi passare il percorso esattamente perché la risoluzione del modulo avviene a tempo di raggruppamento. Non c'è più l'algoritmo di soluzione del modulo nei pacchetti client nella v2. – substack

+0

Mi piacerebbe avere il metodo require da allegare al global restituito dal modulo costruito, dandomi l'incapsulamento. Qualcosa come '' 'bundle.require ('./ x.js')' ''. Ho fatto è creando un manifest di richiede nel mio file principale. C'è un modo migliore per farlo? –