Modules 模塊

2018-07-11 10:05 更新

Node 使用CommonJS 的模塊系統(tǒng)。 Node 同時(shí)也擁有一個(gè)簡(jiǎn)單的模塊加載系統(tǒng)。在Node 的世界里,文件和模塊是一一對(duì)應(yīng)的,比如,以下的程序 foo.js 會(huì)向大家演示加載同一目錄下的circle.js 模塊。

The contents of foo.js: foo.js 的代碼:

var circle = require('./circle');
console.log( 'The area of a circle of radius 4 is '
+ circle.area(4));

The contents of circle.js: cirle.js 的代碼:

var PI = 3.14;
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {
return 2 * PI * r;
};

模塊circle.js 有兩個(gè)方法area()和circumference()。為了使其對(duì)外可見,將其導(dǎo)出到一個(gè)特殊的對(duì)象exprots(還 可以用this 來替代exports)。此模塊中的本地變量是私有的。在這個(gè)例子中,PI 便是circle 模塊的似有變量,puts() 方法則是引用自系統(tǒng)自帶模塊'sys'。沒有'./'前綴的模塊都是寫內(nèi)建的。我們將會(huì)詳細(xì)講解這個(gè)特性。

使用'./'前綴加載的模塊必須和加載模塊的文件位于同一文件夾下,所以將circle.js 和foo.js 放在同一目錄下。 如果不用'./'前綴,比如require('assert'),那么則會(huì)在require.paths 數(shù)組指定的路徑下尋找,require.paths 在我的機(jī) 器上輸出如下:

[ '/home/ryan/.node_libraries' ] [ '/home/ryan/.node_libraries' ] 所以當(dāng)呼叫require('assert')是,系統(tǒng)會(huì)沿著如下路徑尋找該模塊:

  • 1: /home/ryan/.node_libraries/assert.js
  • 2: /home/ryan/.node_libraries/assert.node
  • 3: /home/ryan/.node_libraries/assert/index.js
  • 4: /home/ryan/.node_libraries/assert/index.node

有'.node'后綴的模塊是Node 系統(tǒng)的二進(jìn)制模塊:可以參考'Addons'來得到更多信息。'index.js'允許我們把一個(gè)模塊 作為一個(gè)目錄打包。

require.paths 可以在運(yùn)行時(shí)修改或者在類UNIX 系統(tǒng)下通過修改NODE_PATH 環(huán)境變量來達(dá)到同樣的目的。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)