日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux module原理,NodeJS的模块原理

發布時間:2023/12/2 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux module原理,NodeJS的模块原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近一直在使用Node JS,在網上看到了一段代碼我覺得完美的詮釋了Node JS模塊加載的原理,其實深究下去,它還詮釋了許多東西:Js模塊化編程、閉包的真正強大之處等等。閑話不說,先看看這段代碼:

// - hello.js

void function() {

var mapping = {}, cache = {};

window.define = function(id, func) {

mapping[id] = func

};

window.require = function(id) {

if (!/\.js$/.test(id)) {

id += ".js"

}

if (cache[id]) {

return cache[id]

} else {

return cache[id] = mapping[id]()

}

}

}();

define("js/module/hello.js", function(exports) {

exports = {};? var name = 'Hello Module'

exports.sayHi = function() {

alert("Hi, this is "+ name +" !")

};

return exports

});

// - main.js

var hello = require('js/module/hello');

hello.sayHi();

我稍微改寫了一點代碼,為了能看得更清楚一些,這段代碼在全局對象window上綁定了兩個方法:define和require,寫過Node代碼的人肯定不會陌生,當我需要一個模塊的時候,就會使用require來加載它,可能是原生模塊例如http, express等,也可能是自己寫的Js文件模塊用相對路徑加載。Node在實現模塊加載的時候,就會使用優先本地查找node_modules目錄,然后一層層往上找,最后再按環境變量在安裝node的目錄執行全局模塊查找,PS: 自己寫的業務模塊一般都使用相對路徑require('./business')來查找。當Node找到模塊之后,第一次加載會比較緩慢,但是一旦加載就會緩存起來,類似我們這里做的cache和map的作用,再查找就會快很多。所以Node使用require加載模塊第一次是阻塞式的,緩存之后就應該是異步非阻塞式的。

我們之所以可以通過require實現Js的模塊化編程,完全得益于閉包的存在。閉包可以使得我們在傳遞函數調用結束,返回函數對象之后,依然可以訪問其中的局部變量,就像例子中的name一樣,假如它是一個數據庫Connection對象,或者是一個業務Service對象,那么通過exports,就可以在其他Js文件中使用它并且代碼從文件上是完全隔離的。

Node.js 的詳細介紹:請點這里

Node.js 的下載地址:請點這里

總結

以上是生活随笔為你收集整理的linux module原理,NodeJS的模块原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。