看穿node中的Module

2021-09-11 09:59:34 字數 2329 閱讀 8088

為了減少變數汙染以及**維護node採用了commonjs規範。今天模擬一下module。

首先建立被引入檔案 a.js

module.exports = 'hello';

複製**

建立module檔案

//定義module類

class module;

}}//定義require方法

function

myrequire

()let resut = myrequire('./a');

複製**

獲取檔案路徑

function myrequire(filename)

class modulecatch(e)

}for(var i=0; ireturn pathname;

}catch(e){}

}throw error;

}}//定義拓展名

module.extentions = ['.js','.json','.node'];

複製**

讀取檔案

class module

static wrap(script)

}module.extentions["js"] = function(module))

let dirname = path.resolve(module.filename,'../');

vm.runinthiscontext(fnstr).call(module.exports,module.exports,myrequire,module,dirname,module.filename);

//檔案內部會獲得傳過來的module物件

//模組內部將要匯出的檔案掛載到module.exports上

= 'hello'

}module.extentions["json"] = function(module)

//用於拼接巢狀js檔案

module.warper = ["(function(exports,require,module,__dirname,__filename))"];

function myrequire(filename)

複製**

暫存已讀取檔案

function myrequire(filename)

//載入檔案

let module = new module(filename);

module.load();

//快取檔案

module.caches[filename] = module;

}複製**

完整**

a.js

module.exports = 'hello'

複製**

module.js

let path = require('path');

let fs = require('fs');

let vm = require('vm');

class module;

}load

() static wrap(script)

static getpath(filename)catch(e)

}for(var i=0; ireturn pathname;

}catch(e){}

}throw error;

// path.resolve(__dirname, filename);

}}module.extentions = ['.js','.json','.node'];

module.caches = {};

module.warper = ["(function(exports,require,module,__dirname,__filename))"];

module.extentions["js"] = function(module)

module.extentions["json"] = function(module)

function myrequire(filename)

//載入檔案

let module = new module(filename);

module.load();

module.caches[filename] = module;

return module.exports;

}let school = myrequire('./a.js');

複製**

Node核心模組 Module

分類 載入機制 路徑分析 檔案定位 載入封裝 function exports,require,module,filename,dirname 編譯執行 快取delete require.cache id 模組迴圈載入console.log a 開始 exports.done false const...

關於python中的module

python中的module 模組 關於這個概念以及使用時主要有以下幾點需要注意 1 import xx時,會首先將這個xx module中的 執行一遍 且僅執行一遍 例如 2 模組包 3 通過import可以匯入其他模組中的物件 物件包括 函式 全域性變數 import module name m...

Linux kernel中module相關命令集

linux的kernel能夠以動態的方式載入,解除安裝模組,以達到減小核心的大小,複雜度,以及增加核心的靈活性。目前,我知道的有lsmod,insmod,rmmod,modprobe四條命令,現在分別總結記錄這四條命令,命令後的模組名稱均不加字尾 如.ko或.o 1 lsmod 即list modu...