Node.js 模塊系統(tǒng)

2018-01-14 15:07 更新

Node.js使用基于模塊系統(tǒng)的文件。每個文件就是它自己的模塊。每個文件都可以使用 module 變量訪問當(dāng)前模塊定義。當(dāng)前模塊的導(dǎo)出由 module.exports 變量確定。要導(dǎo)入模塊,請使用全局變量的require函數(shù)。

例子

以下代碼在文件 myData.js 中創(chuàng)建一個函數(shù),以便在應(yīng)用程序的各個部分重復(fù)使用。要從位于c:/intro/base/myData.js中的文件導(dǎo)出函數(shù),我們只需將其分配給module.exports。

module.exports = function () {
   console.log("a function in file myData"); 
}; 

為了從文件c:/intro/base/myValue.js使用此函數(shù),使用全局 require 函數(shù)導(dǎo)入myData,并將返回的值存儲在局部變量中。

var myData = require("./myData"); 
myData(); // logs out : "a function in file myData" 

module.export

Node.js中的每個文件都是一個模塊。要從模塊導(dǎo)出的項目應(yīng)該附加到module.exports變量。module.exports被定義為每個文件中的一個新的空對象。module.exports = {}是隱式存在。

默認(rèn)情況下,每個模塊導(dǎo)出一個空對象, {} 。

console.log(module.exports); // {} 

導(dǎo)出別名

我們可以從模塊中導(dǎo)出多個變量。實現(xiàn)這一點的一種方法是創(chuàng)建一個新的對象字面量并將其分配給module.exports。在c:/intro/exports/myData1.js我們有:

var a = function () {
    console.log("a called"); 
}; /*from www.o2fo.com*/
var b = function () {
    console.log("b called"); 
}; 

module.exports = {
    a: a, 
    b: b 
}; 

在c:/intro/exports/myData2.js我們有:

module.exports.a = function () { 
    console.log("a called"); 
}; 

module.exports.b = function () { 
    console.log("b called"); 
}; 

Node.js幫助我們?yōu)閙odule.export創(chuàng)建一個名為exports的別名,而不是每次都鍵入module.exports.something,你可以簡單地使用exports.something。

在c:/intro/exports/myData3.js我們有

exports.a = function () { 
    console.log("a called"); 
}; 
exports.b = function () { 
    console.log("b called"); 
}; 

exports 就像任何其他的JavaScript變量一樣。Node.js只是export = module.exports。如果我們添加一些東西,例如,添加myData到exports,也就是exports.myData = 123,因為JavaScript變量是引用,我們可以有效地實現(xiàn)module.exports.myData = 123。以下代碼顯示,所有這些方法從消費(導(dǎo)入)角度來看是等效的。

在c:/intro/exports/app.js我們有

var myData1 = require("./myData1"); 
myData1.a(); //www.o2fo.com
myData1.b(); 

var myData2 = require("./myData2"); 
myData2.a(); 
myData2.b(); 

var myData3 = require("./myData3"); 
myData3.a(); 
myData3.b(); 

模塊的最佳實踐

不要使用.js擴展名

最好是做require('./myData')而不是require('./myData.js'),即使兩者對Node.js都很好。

相對路徑

當(dāng)使用基于文件的模塊時,你需要使用相對路徑(換句話說,做require('./myData')而不是require('myData'))。

利用exports

當(dāng)你想要導(dǎo)出多個事物時,嘗試并使用exports alias。

以下代碼顯示如何創(chuàng)建本地變量并導(dǎo)出

var myData = exports.myData = /* whatever you want to export as `myData` from this module */ ; 

導(dǎo)出整個文件夾

如果有太多你持續(xù)導(dǎo)入到其他文件的模塊在一起,盡量避免重復(fù)導(dǎo)入。

var myData = require("../something/myData"); 
var myValue = require("../something/myValue"); 
var another = require("../something/another"); 
var third = require("../something/third"); 

相反,在something文件夾中創(chuàng)建一個單獨的index.js。在index.js中,導(dǎo)入所有模塊一次,然后從此模塊導(dǎo)出它們。

在c:/yourFolder/index.js我們有

exports.myData = require("./myData"); 
exports.myValue = require("./myValue"); 
exports.another = require("./another"); 
exports.third = require("./third"); 

現(xiàn)在你可以在每當(dāng)你需要所有這些時簡單地導(dǎo)入這個index.js:

var something = require("../something/index"); 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號