2012-07-06 3 views
11

빠른 질문이지만 놀랍게도 인터넷 검색으로 대답을 찾을 수 없었습니다 ... node 대화 형 인터프리터를 사용할 때 기본적으로 모든 코어 모듈의 이름을 입력하고 결과를 객체로 볼 수 있습니다. 콘솔 ...하지만, 코어 모듈은 .js 파일을 실행할 때 기본적으로 이와 같이 모두 포함되지는 않는다는 것을 알고 있습니다.Node.js가 자동으로 '필요한 모듈'은 무엇입니까?

누구나 나를 위해 이것을 정리할 수 있습니까? 모든 도움을 주셨습니다.

+2

'.js' 스크립트에서 사용하는 모든 모듈을 명시 적으로 요구해야합니다. REPL의 이러한 동작은 특정 환경/유스 케이스에 대한 편의 일뿐입니다. –

+3

'콘솔 '과 같은 것들은 자동 요구 모듈처럼 느껴질 수도 있지만 실제로는 단지 전역 적이라는 것을 지적하고 싶습니다. 거기에 몇 가지. http://nodejs.org/api/globals.html – joshuapoehls

답변

20

노드 0.8부터, 당신은 REPL에 자신의 이름을 입력 할 때 automatically required 될 것 repl.jsdefines a list of built-in libraries :

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은 기본적으로 핵심 라이브러리를 제공합니다. –

0

현재 repl.js 파일을 감싸는 npm 패키지가 있으며 좀 더 친숙한 방식으로 목록을 제공합니다.

builtin-modules

나는 다른 핵심 모듈 (즉 실제로 AngularJS와의 다른 버전 일) 해당 버전을 가지고,이 신속하게 다른 노드 버전 (NVM)를 갖는 시나리오에서 그 목록을 흥미로운 일이 될 수 있습니다 가정합니다.

+0

이것은 과도하게 잔인한 것처럼 보이며 불필요한 패키지/라이브러리의 과다 사용을 장려한다고 주장합니다. – steviejay

+0

나는 동의하지 않는다. npm 패키지는 Sindre Sorhus가 유지 관리하는 경우 특히 2012 년부터 stackoverflow 응답보다 최신 상태로 유지 될 가능성이 큽니다. 'require ('builtin-modules/static');와 함께 얻을 수있는 정적 목록이 있습니다. – Gregor

관련 문제