Node.js自动“需要”哪些模块?

时间:2012-07-06 14:27:14

标签: javascript node.js

快速提问,但我惊讶地找不到谷歌搜索的答案......当我使用node交互式解释器时,我可以输入基本上所有核心模块的名称并查看它们作为对象输出到控制台上...但是,据我所知,运行.js文件时默认情况下核心模块并不是全部包含在内。

任何人都可以为我清除这个吗?所有帮助表示赞赏。

3 个答案:

答案 0 :(得分:20)

从节点0.8开始,repl.js defines a list of built-in libraries在您在REPL上输入其名称时将为automatically required

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;
}

这是特别 repl.js的一个函数,在编写自己的Node.js程序时根本不起作用;在那里,你必须具体require你想要使用的任何东西。

答案 1 :(得分:1)

您需要要求在节点中使用的所有模块。 Node.js中包含除javascript规范(ECMA规范)中包含的函数以外的任何内容。

要访问核心库,您需要它们。例如,如果您需要访问创建服务器功能,则需要执行以下操作:

var http = require('http');

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

您也可以在交互式控制台中执行此操作。这是将模块分配给变量并在之后开始使用它。

答案 2 :(得分:0)

目前有一个包裹repl.js文件的npm包,并以更友好的方式为您提供列表。

builtin-modules

我认为在具有不同节点版本(nvm)的场景中快速获取该列表可能会很有趣,这些版本具有不同的核心模块(实际上在不同版本的AngularJS中发生)。