2012-01-20 16 views
6

Ciao con RequireJS posso impostare un percorso di base come questo: base : './app/' così quando mi trovo in ./app/foo/bar/ per esempio e ho una sceneggiatura in cui io uso require('foo'); RequireJS poi sarebbe cercare ./app/foo.js e non nella cartella node_module o in ./app/foo/bar/foo.js questo molto utile quando hai un tipo di struttura dove sarebbe molto più pulito per te come sviluppatore vedere le dipendenze invece di avere ../../foo.js. Potrei avere ./app/foo.js e ./app/foo/foo.js e ./app/foo/bar/foo.js sarebbe molto più pulito di avere:Node.js richiede() rispetto a RequireJS?

require('foo'); 
require('foo/foo'); 
require('foo/bar/foo'); 

piuttosto che:

require('../../foo'); 
require('../foo'); 
require('./foo'); 

Ora si potrebbe dire perché non cambiare il nome e non hanno foo ovunque, andiamo diciamo che non possiamo per nessuna ragione ...

Un'altra mancanza di funzionalità che vedo nel nodo richiede un metodo contro RequireJS è la possibilità di impostare la mappatura del percorso, se ho una directory denominata ./app/super-sized-directory-name/ in RequireJS potrebbe semplicemente fare 'big-dir' : 'super-sized-directory-name' e quindi ho potuto usare semplicemente require('./app/big-dir/foo') con Node.JS del metodo richiedono questo non è possibile per quanto ne so ...

+1

[modul8] (https://github.com/clux/modul8) supporta questa funzionalità tramite domini ma la sintassi non è compatibile con il nodo.Credo che browserify supporta solo i percorsi dei file relativi – Raynos

+0

@Raynos ciao! Grazie per la tua risposta! Ho cambiato la domanda per rendere più chiaro il mio punto di vista, darò un'occhiata a modul8 a prima vista sembra più complicato di browserify, quello che mi piace in browserify è che compila al volo la sceneggiatura e accetta anche il caffè che è molto bello – panosru

+0

@Raynos Ho controllato di nuovo modul8 e ho letto i documenti con più attenzione. Credo che sia molto bello e forse quello che sto cercando! Lo testerò ora :) – panosru

risposta

2
--alias, -a Register an alias with a colon separator: "to:from" 
      Example: --alias 'jquery:jquery-browserify' 

È possibile registrare gli alias con browserify, in modo che copra le ridenominazione.

Per quanto riguarda i percorsi assoluti radicati, ciò non può essere fatto. Come già detto, lo modul8 ha un meccanismo di namespacing per risolvere questo problema.

Consiglierei pong SubStack in #stackvm su freenode e chiederglielo direttamente.

+0

Do browserify o modul8 funzionano in modo asincrono? In caso contrario, mi sembra che requirejs rimanga almeno il diritto di essere utilizzato per i moduli utilizzati nel browser. – Bruiser

+1

@Bruiser lavorano in modo asincrono, ovvero non bloccano. Funzionano precaricando tutti i moduli – Raynos

+0

grazie, quindi preferiresti usare browserify su requirejs in un progetto di nodo? – Bruiser

0

Potrebbe essere utile o meno, ma credo che il framework AMD Loader di Dojo Framework sia compatibile API con RequireJS e che l'utilizzo di un nuovo microkernel non inquini lo spazio dei nomi globale.

Credo che abbia solo require() e define() nel namespace globale ora.

In ogni caso il loro metodo di affrontare questo è quello di fare qualcosa di simile:

require(["dojo/node!util"], function(util){ 
    // Module available as util 
}); 

La documentazione è a http://dojotoolkit.org/reference-guide/1.8/dojo/node.html

0

Usa uRequire che fornisce un 'ponte' tra nodejs require e AMD define moduli, senza reinventare la ruota (è costruita sulla base dei due standard). Fondamentalmente converte i moduli dal formato AMD o commonJS all'altro formato o UMD che funziona senza problemi su entrambi i nodi & del browser.

Sta inoltre traducendo i percorsi di dipendenza con flexible path conventions, quindi è possibile avere '../../foo' o 'bar/foo' in base a ciò che ha più senso nel punto in cui ci si trova.

I moduli AMD o UMD vengono caricati in modo asincrono sul browser (utilizzando AMD/requireJs o altro caricatore AMD) e sul nodo viene simulato anche il nodo asincrono require(['dep1', 'dep2'], function(dep1,dep2){...}).

Problemi correlati