2012-07-06 14 views
11

Pregunta rápida, pero sorprendentemente no pude encontrar la respuesta con un poco de Google ... cuando uso el intérprete interactivo node, puedo escribir los nombres de básicamente todos los módulos centrales y verlos como objetos en la consola ... sin embargo, entiendo que los módulos centrales no están todos incluidos así por defecto cuando se ejecuta un archivo .js.¿Qué módulos node.js 'requieren' automáticamente?

¿Alguien puede aclarar esto por mí? Toda ayuda apreciada.

+2

En un script '.js', debe requerir explícitamente todos los módulos que use. Ese comportamiento en el REPL es meramente una conveniencia para ese ambiente particular/caso de uso. –

+3

Me gustaría señalar que algunas cosas, como 'console', pueden parecer un módulo auto-requerido, pero en realidad son solo globales. Hay algunos de estos. http://nodejs.org/api/globals.html – joshuapoehls

Respuesta

20

A partir de Nodo 0,8, repl.jsdefines a list of built-in libraries que será automatically required cuando se escribe su nombre en el 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; 
} 

Ésta es específicamente función de repl.js, y no funciona en absoluto de ninguna manera al escribir sus propios programas Node.js; allí, debe especificar require todo lo que quiera usar.

1

Necesita requerir todos los módulos que desea usar en el nodo. En Node.js. se incluye nada más que las funciones incluidas en la especificación de JavaScript (especificación ECMA).

Para obtener acceso a las bibliotecas centrales, necesita que las requiera. Por ejemplo, si usted necesita el acceso a la función de servidor de la creación de lo que necesita hacer lo siguiente:

var http = require('http'); 

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

También puede hacer esto en la consola interactiva. Eso es asignar el módulo a una variable y comenzar a usarlo después.

+0

La pregunta estaba en REPL y REPL proporciona bibliotecas centrales por defecto. –

0

Por el momento hay un paquete npm que envuelve el archivo repl.js y le da la lista de una manera más amigable.

builtin-modules

supongo que esto puede ser interesante para obtener rápidamente esa lista en un escenario de tener diferentes versiones nodo (NVM), teniendo dichas versiones diferentes módulos básicos (que realmente sucede con diferentes versiones de AngularJS).

+0

Esto definitivamente parece excesivo y yo diría que promueve el uso excesivo de paquetes/bibliotecas innecesarios. – steviejay

+0

No estoy de acuerdo. Es mucho más probable que un paquete npm se mantenga actualizado que una respuesta de stackoverflow de 2012, especialmente si Sindre Sorhus lo mantiene. Viene con una lista estática que obtienes con 'require ('builtin-modules/static');' – Gregor

Cuestiones relacionadas