溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

淺談Nodejs模塊系統(tǒng)及require機(jī)制

發(fā)布時(shí)間:2020-07-16 15:03:18 來(lái)源:億速云 閱讀:171 作者:小豬 欄目:開發(fā)技術(shù)

小編這次要給大家分享的是淺談Nodejs模塊系統(tǒng)及require機(jī)制,文章內(nèi)容豐富,感興趣的小伙伴可以來(lái)了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

一、簡(jiǎn)介

  Nodejs 有一個(gè)簡(jiǎn)單的模塊加載系統(tǒng)。在 Nodejs 中,文件和模塊是一一對(duì)應(yīng)的(每個(gè)文件被視為一個(gè)獨(dú)立的模塊),這個(gè)文件可能是 JavaScript 代碼,JSON 或編譯過的C/C++ 擴(kuò)展,例如:

/**
 *foo.js
 *將這個(gè)js文件導(dǎo)出為模塊
 */
exports.hello = function() {
  console.log("hello Nodejs!");
}
/**
 *main.js
 *main.js和foo.js在同一目錄下
 *在控制臺(tái)中將會(huì)輸出:hello Nodejs!
 */
var foo = require("./foo.js");

foo.hello();

二、如何將模塊導(dǎo)出—— module.exports 與 exports 的區(qū)別

  Nodejs 中的每一個(gè)模塊都會(huì)自動(dòng)創(chuàng)建一個(gè) module 對(duì)象,同時(shí) module 對(duì)象下有一個(gè)叫 exports 的屬性,可以將某個(gè)類的實(shí)例賦值給 module.exports,從而導(dǎo)出這個(gè)類的實(shí)例。在模塊被執(zhí)行前,Nodejs 會(huì)將 module.exports 的值賦于全局變量 exports ,以便 module.exports.f = ... 可以更簡(jiǎn)潔的寫成 exports.f = ... 。注意:就像所有變量一樣,如果重新給 exports 賦值,它就不再綁定到 module.exports 了,也不會(huì)導(dǎo)出指定模塊

例如:

/**
 *foo.js
 *導(dǎo)入方式:var foo = require("./foo.js");
 */
function Foo() {}
Foo.prototype.hello = function() {
  console.log("hello Nodejs!");
}

module.exports = new Foo();
/**
 *foo.js
 *導(dǎo)入方式:var Foo = require("./foo.js"); var foo = new Foo();
 */
function Foo() {}
Foo.prototype.hello = function() {
  console.log("hello Nodejs!");
}

module.exports = Foo;

/**
 *foo.js
 *導(dǎo)入方式:var foo = require("./foo.js");
 */
exports.hello = function() {
  console.log("hello Nodejs!");
}

三、require的機(jī)制

  假設(shè)Y是路徑,X是文件名或目錄名,當(dāng) Nodejs 遇到 require(Y+X) 時(shí),按照下面的順序處理:

  1、如果 X 是核心模塊(例如:require("http"))

  a.返回該模塊

  b.不再繼續(xù)執(zhí)行

  2、如果Y是以“./”、“/”或“../”開頭

  a.把X當(dāng)成文件,從指定路徑開始,依次查找下面文件:X、X.js、X.json、X.node,只要其中一個(gè)存在,就返回該文件,不再繼續(xù)執(zhí)行

  b.把X當(dāng)成目錄,從指定路徑開始,依次查找下面文件:X/package.json(main字段)、X/index.js、X/index.json、X/index.node,只要其中一個(gè)存在,就返回該文件,不再繼續(xù)執(zhí)行

  3.如果 X 不是核心模塊,也沒有以“./”、“/”或“../”開頭,則Nodejs會(huì)從當(dāng)前模塊的父目錄開始,嘗試從它的 /node_module 目錄里加載模塊,如果還是沒有找到,則移動(dòng)到再上一層父目錄,直到文件系統(tǒng)的根目錄

  4.拋出“not found”

看完這篇關(guān)于淺談Nodejs模塊系統(tǒng)及require機(jī)制的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI