2012-07-06 65 views
11

快速的問題,但我驚訝地找不到一個谷歌搜索的答案...當我使用node交互式解釋器,我可以輸入基本上所有核心模塊的名稱,並看到他們作爲對象輸出到控制檯......但是,我知道在運行.js文件時,默認情況下核心模塊並不是全部包含在內。Node.js自動需要哪些模塊?

任何人都可以爲我清除它嗎?所有幫助讚賞。

+2

在'.js'腳本中,您必須明確要求您使用的所有模塊。 REPL中的這種行爲僅僅是爲特定環境/用例提供的便利。 – 2012-07-06 14:35:52

+3

我想指出的是,有些東西,比如'console',可能感覺像是一個自動需要的模塊,但實際上只是全局的。有幾個這些。 http://nodejs.org/api/globals.html – joshuapoehls 2012-07-06 14:58:20

回答

20

在節點0.8開始,repl.jsdefines a list of built-in libraries這將是automatically required當你在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; 
} 

這是專門repl.js功能,並且不以任何方式在所有的工作在編寫自己的Node.js程序時;在那裏,你必須專門使用require任何你想使用的東西。

1

您需要在節點中要求使用所有模塊。 Node.js中沒有包含javascript規範(ECMA規範)中包含的函數。

要訪問核心庫,您需要它們。例如,如果你需要訪問你需要做以下的創建服務器功能:

var http = require('http'); 

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

你也可以做到這一點的交互式控制檯。這是將模塊分配給一個變量,然後開始使用它。

+0

問題在於REPL,REPL默認提供核心庫。 – 2014-02-03 10:02:15

0

目前有一個npm包裹,它包裹着repl.js文件,並以更友好的方式給你列表。

builtin-modules

我想這可能是有趣的,快速獲得具有不同節點版本(NVM)的情況下該列表中,擁有這些不同版本的核心模塊(實際與不同版本的AngularJS的發生)。

+0

這絕對看起來像是矯枉過正,我認爲會促使過度使用不必要的軟件包/庫。 – steviejay 2016-06-30 15:41:22

+0

我不同意。一個npm包更有可能保持最新的比2012年的stackoverflow答案,特別是如果它由Sindre Sorhus維護。它帶有一個靜態列表,你可以使用require('builtin-modules/static');' – Gregor 2016-09-10 02:23:36