91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是nodejs模塊

發布時間:2021-10-29 15:33:23 來源:億速云 閱讀:185 作者:iii 欄目:web開發

本篇內容介紹了“什么是nodejs模塊”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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

什么是nodejs模塊

本教程操作環境:windows7系統、nodejs 12.19.0版、Dell G3電腦。

為了讓Node.js的文件可以相互調用,Node.js提供了一個簡單的模塊系統。

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

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

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

module1把函數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進來,這個時候,in_module1就相當于module1的exports對象。當使用in_module1調用func1的時候,相當于通過module1的exports對象調用func1。

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

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

同理,module3把module2 require進來,此時in_module2就相當于module2的exports對象。

運行結果如下:

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引入模塊不僅僅得到模塊的公共接口,同時會把文件里別的語句一并引用進來,比如:

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函數,同時執行了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

現在,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的部分,運行結果為

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順序調整一下:

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

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

運行結果為:

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用某種機制保證了同一個模塊在另一個模塊里不會被重復載入,所以

this is in module1

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

那么,如果循環載入了會發生什么呢?現在我們讓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');
}

運行結果如下:

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的結果一樣,并沒有報錯。而在運行module1的時候,當走到module2里面,忽略了require module1的語句之后,module2調用了module1的func1,程序出錯。

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

“什么是nodejs模塊”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

衡山县| 綦江县| 阿图什市| 普格县| 博白县| 洛隆县| 定陶县| 昌都县| 皮山县| 乌拉特中旗| 麻江县| 泸溪县| 河间市| 米林县| 星子县| 宁晋县| 平果县| 蒙城县| 仁寿县| 辽源市| 汕头市| 西乌珠穆沁旗| 重庆市| 上杭县| 庆城县| 开江县| 黑河市| 曲阳县| 嘉祥县| 南康市| 来宾市| 威宁| 万荣县| 祁门县| 灵台县| 马边| 疏勒县| 乃东县| 宜州市| 延吉市| 临汾市|