2012-07-06 8 views
11

Domanda veloce, ma con la quale non riesco a trovare la risposta con un po 'di ricerca su Google ... quando uso l'interprete interattivo node, posso digitare i nomi di praticamente tutti i moduli principali e vederli come oggetti su la console ... tuttavia, capisco che i moduli principali non sono tutti inclusi in questo modo per impostazione predefinita quando si esegue un file .js.Quali moduli richiede Node.js 'automaticamente?

Qualcuno può chiarire questo per me? Tutto l'aiuto è apprezzato.

+2

In uno script '.js', è necessario richiedere esplicitamente tutti i moduli che si utilizzano. Questo comportamento nel REPL è semplicemente una comodità per quel particolare ambiente/caso d'uso. –

+3

Vorrei sottolineare che alcune cose, come 'console', possono sembrare un modulo auto-richiesto, ma in realtà sono solo globali. Ce ne sono alcuni. http://nodejs.org/api/globals.html – joshuapoehls

risposta

20

A partire dal nodo 0.8, repl.jsdefines a list of built-in libraries che sarà automatically required quando si digita il loro nome sul REPL:

exports._builtinLibs = ['assert', 'buffer', 'child_process', 'cluster', 
    'crypto', 'dgram', 'dns', 'events', 'fs', 'http', 'https', 'net', 
    'os', 'path', 'punycode', 'querystring', 'readline', 'repl', 
    'string_decoder', 'tls', 'tty', 'url', 'util', 'vm', 'zlib']; 

... 

if (exports._builtinLibs.indexOf(cmd) !== -1) { 
    var lib = require(cmd); 
    if (cmd in self.context && lib !== self.context[cmd]) { 
    self.outputStream.write('A different "' + cmd + 
          '" already exists globally\n'); 
    } else { 
    self.context._ = self.context[cmd] = lib; 
    self.outputStream.write(self.writer(lib) + '\n'); 
    } 
    self.displayPrompt(); 
    return; 
} 

Questo è specificamente una funzione di repl.js, e non funziona affatto in alcun modo quando scrivi i tuoi programmi Node.js; lì, è necessario specificamente require tutto ciò che si desidera utilizzare.

1

È necessario richiedere tutti i moduli che si desidera utilizzare nel nodo. Nient'altro che le funzioni incluse nelle specifiche javascript (specifiche ECMA) sono incluse in Node.js.

Per accedere alle librerie principali è necessario richiederle. Per esempio, se avete bisogno di accedere alla funzione di server creare è necessario effettuare le seguenti operazioni:

var http = require('http'); 

http.createServer(function(req, res) { 
    console.log(req); 
}).listen(3000); 

Si può anche fare questo nella console interattiva. Questo è assegnare il modulo a una variabile e iniziare a usarlo in seguito.

+0

La domanda era su REPL e REPL fornisce le librerie di base per impostazione predefinita. –

0

Al momento è disponibile un pacchetto npm che racchiude il file repl.js e fornisce l'elenco in un modo più amichevole.

builtin-modules

Suppongo che questo potrebbe essere interessante per ottenere rapidamente tale elenco in uno scenario di avere versione nodo diversa (NVM), avendo quelle versioni differenti moduli di base (che in realtà accade con diverse versioni di AngularJS).

+0

Questo sembra decisamente eccessivo e direi che promuova la sovrabbondanza di pacchetti/librerie non necessari. – steviejay

+0

Non sono d'accordo. è molto più probabile che un pacchetto npm venga aggiornato rispetto a una risposta StackOverflow a partire dal 2012, specialmente se è gestita da Sindre Sorhus. Viene fornito con una lista statica che si ottiene con 'require ('builtin-modules/static');' – Gregor

Problemi correlati