2012-07-06 21 views
11

Câu hỏi nhanh, nhưng tôi ngạc nhiên không thể tìm thấy câu trả lời cho một chút Googling ... khi tôi sử dụng trình thông dịch tương tác node, tôi có thể nhập tên của tất cả các mô-đun cơ bản và xem chúng xuất dưới dạng đối tượng giao diện điều khiển ... tuy nhiên, tôi hiểu rằng các mô-đun cốt lõi không được bao gồm tất cả như thế này theo mặc định khi chạy tệp .js.Mô-đun nào Node.js 'yêu cầu' tự động?

Có ai có thể xóa điều này cho tôi không? Tất cả trợ giúp đều được đánh giá cao.

+2

Trong tập lệnh '.js', bạn phải yêu cầu rõ ràng tất cả các mô-đun bạn sử dụng. Hành vi đó trong REPL chỉ là một sự thuận tiện cho môi trường/trường hợp sử dụng cụ thể đó. –

+3

Tôi muốn chỉ ra rằng một số điều, như 'giao diện điều khiển', có thể cảm thấy giống như một mô-đun yêu cầu tự động, nhưng thực sự chỉ là các hình cầu. Có một vài trong số này. http://nodejs.org/api/globals.html – joshuapoehls

Trả lời

20

Bắt đầu từ Node 0.8, repl.jsdefines a list of built-in libraries rằng sẽ automatically required khi bạn gõ tên của họ trên 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; 
} 

Đây là đặc biệt một chức năng của repl.js, và không làm việc ở tất cả dưới mọi hình thức khi viết các chương trình Node.js của riêng bạn; ở đó, bạn phải cụ thể là require bất kỳ điều gì bạn muốn sử dụng.

1

Bạn cần yêu cầu tất cả các mô-đun bạn muốn sử dụng trong nút. Không có gì khác ngoài các hàm được bao gồm trong đặc tả javascript (đặc tả ECMA) được bao gồm trong Node.js.

Để truy cập vào các thư viện cốt lõi bạn cần để yêu cầu chúng. Ví dụ: nếu bạn cần quyền truy cập vào chức năng tạo máy chủ, bạn cần phải thực hiện như sau:

var http = require('http'); 

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

Bạn cũng có thể thực hiện việc này trong bảng điều khiển tương tác. Đó là gán module cho một biến và bắt đầu sử dụng nó sau đó.

+0

Câu hỏi đặt ra là REPL và REPL cung cấp thư viện lõi theo mặc định. –

0

Hiện tại, có gói npm kết thúc tốt đẹp quanh tệp repl.js và cung cấp cho bạn danh sách theo cách thân thiện hơn.

builtin-modules

Tôi cho rằng đây có thể là thú vị để nhanh chóng có được danh sách đó trong một kịch bản có phiên bản nút khác nhau (nvm), có những phiên bản module lõi khác nhau (mà thực sự xảy ra với các phiên bản khác nhau của AngularJS).

+0

Điều này chắc chắn có vẻ như overkill và tôi sẽ tranh luận thúc đẩy việc lạm dụng các gói/thư viện không cần thiết. – steviejay

+0

Tôi không đồng ý. gói npm có nhiều khả năng được cập nhật hơn so với câu trả lời stackoverflow từ năm 2012, đặc biệt nếu nó được Sindre Sorhus duy trì. Nó đi kèm với một danh sách tĩnh mà bạn nhận được với 'require ('builtin-modules/static');' – Gregor

Các vấn đề liên quan