以偽代碼進(jìn)行說明:
function require(modulePath) {
// 1. 將modulePath轉(zhuǎn)換為絕對路徑
// 2. 判斷該模塊是否已有緩存
if (require.cache['絕對路徑']) {
return require.cache['絕對路徑'];
}
// 3. 讀取文件內(nèi)容
// 4. 包裹到一個(gè)函數(shù)中
function _temp(module, exports, require, __dirname, __filename) {
// 模塊代碼...
}
// 6. 創(chuàng)建module對象
module.exports = {};
const exports = module.exports;
// 7. 調(diào)用函數(shù)
__temp.call(module.exports, module, exports, require, module.path, module.filename);
return module.exports;
}
// require函數(shù)有個(gè)靜態(tài)屬性cache, 它是一個(gè)對象, 里面緩存了已經(jīng)加載的模塊的內(nèi)容
require.cache = {};