成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

什么是nodejs模塊

本篇內(nèi)容介紹了“什么是nodejs模塊”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:空間域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、禹王臺網(wǎng)站維護(hù)、網(wǎng)站推廣。

模塊是Node.js應(yīng)用程序的基本組成部分,文件和模塊是一一對應(yīng)的,一個Nodejs模塊就是一個文件,而這個文件可能是JavaScript代碼、JSON或者編譯過的“C/C++”擴展,引用模塊可用“require('文件路徑')”語句。

什么是nodejs模塊

本教程操作環(huán)境:windows7系統(tǒng)、nodejs 12.19.0版、Dell G3電腦。

為了讓Node.js的文件可以相互調(diào)用,Node.js提供了一個簡單的模塊系統(tǒng)。

模塊是Node.js 應(yīng)用程序的基本組成部分,文件和模塊是一一對應(yīng)的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。

對于nodejs來說,一個文件就是一個模塊,你可以export接口出去,也可以require別的模塊進(jìn)來。

// module1.js
exports.func1 = function(){
        console.log('func1 from module1 called');
}

module1把函數(shù)func1通過exports對象作為模塊的公共訪問接口。

//module2.js
var in_module1 = require('./module1.js');
in_module1.func1();
exports.func2 = function(){
        console.log('func2 from module2 called');
}

module2把module1 require進(jìn)來,這個時候,in_module1就相當(dāng)于module1的exports對象。當(dāng)使用in_module1調(diào)用func1的時候,相當(dāng)于通過module1的exports對象調(diào)用func1。

同時,module2自己的函數(shù)func2也通過模塊的exports對象作為module2公共接口。

// module3.js
var in_module2 = require('./module2.js');
in_module2.func2();

同理,module3把module2 require進(jìn)來,此時in_module2就相當(dāng)于module2的exports對象。

運行結(jié)果如下:

rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
func1 from module1 called
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
func1 from module1 called
func2 from module2 called

nodejs引入模塊不僅僅得到模塊的公共接口,同時會把文件里別的語句一并引用進(jìn)來,比如:

module1.js改為

// module2.js
console.log('this is in module2');
var in_module1 = require('./module1.js');
  
in_module1.func1();
  
exports.func2 = function(){
       console.log('func2 from module2 called');
}

module2引入了module1的func1函數(shù),同時執(zhí)行了module1中的打印語句:

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2         - module2 self
this is in module1         - require module1
func1 from module1 called  - module2 self

現(xiàn)在,module2 載入了module1,module3載入了module2,如果module3再載入一次module1會怎么樣呢?

// module3.js
var in_module1 = require('./module1.js');
var in_module2 = require('./module2.js');

in_module1.func1();
in_module2.func2();

這時候,module3首先載入了module1,又載入了module2,module2自己又載入了module1的部分,運行結(jié)果為

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module1        -  require module1
this is in module2        -  require module2
func1 from module1 called -  require module2
func1 from module1 called -  module3 self
func2 from module2 called -  module3 self

假如把module3的require順序調(diào)整一下:

// module3.js
var in_module2 = require('./module2.js');
var in_module1 = require('./module1.js');

in_module1.func1();
in_module2.func2();

運行結(jié)果為:

rlan@rlan-LA:~/nodejs/nodetest$ node module3.js
this is in module2         - require module2
this is in module1         - require module2
func1 from module1 called  - require module2
func1 from module1 called  - module3 self
func2 from module2 called  - module3 self

看起來nodejs用某種機制保證了同一個模塊在另一個模塊里不會被重復(fù)載入,所以

this is in module1

這一行只出現(xiàn)了一次,雖然在module3.js里似乎被載入了兩次。

那么,如果循環(huán)載入了會發(fā)生什么呢?現(xiàn)在我們讓module1來require module2:

// module1.js
console.log('this is in module1');

var in_module2 = require('./module2.js');

exports.func1 = function(){
        console.log('func1 from module1 called');
}
// module2.js
console.log('this is in module2');
var in_module1 = require('./module1.js');

in_module1.func1();

exports.func2 = function(){
        console.log('func2 from module2 called');
}

運行結(jié)果如下:

rlan@rlan-LA:~/nodejs/nodetest$ node module1.js
this is in module1
this is in module2
/home/rlan/nodejs/nodetest/module2.js:4
in_module1.func1();
           ^
TypeError: in_module1.func1 is not a function
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module2.js:4:12)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
    at Module.load (module.js:344:32)
    at Function.Module._load (module.js:301:12)
    at Module.require (module.js:354:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (/home/rlan/nodejs/nodetest/module1.js:3:18)
    at Module._compile (module.js:410:26)
    at Object.Module._extensions..js (module.js:417:10)
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js
this is in module2
this is in module1
func1 from module1 called

nodejs似乎阻止了載入自己的行為,運行module2的時候,行為跟module1沒有載入module2的結(jié)果一樣,并沒有報錯。而在運行module1的時候,當(dāng)走到module2里面,忽略了require module1的語句之后,module2調(diào)用了module1的func1,程序出錯。

綜上,nodejs里嵌套重復(fù)載入模塊(或者載入自己)的require語句是不能正確執(zhí)行的。

“什么是nodejs模塊”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

本文題目:什么是nodejs模塊
分享鏈接:http://jinyejixie.com/article2/ggieoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、微信公眾號網(wǎng)站導(dǎo)航、網(wǎng)站策劃網(wǎng)站改版、網(wǎng)站營銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司