儒猿互聯(lián)網(wǎng)Java工程師面試突擊(第二季)
const modules = {} // modules 用于緩存所有模塊function execute(key) {
?// key => index.js/a.js
?if (modules[key]) {
? ?return modules[key];
?}
?var item = depRelation.find(dep => dep.key === key);
?var require = (path) => {
? ?// 可能導(dǎo)入了其他的文件,所以需要將 execute 傳遞出去
? ?// 輸入一個文件路徑,拿到路徑去執(zhí)行這個文件
? ?return execute(pathToKey(path));
?}
?modules[key] = {__esModule: true}; // 標(biāo)識這個模塊是 ES 模塊 => 自己有 default,不需要添加 default
?var module = {exports: modules[key]};
?// 執(zhí)行一個文件的代碼,傳入導(dǎo)入其他模塊的方法(require) + 如何導(dǎo)出自身模塊(導(dǎo)出的東西放置在 module.exports 對象中)
?item.code(require, module, module.exports); // 調(diào)用 code 轉(zhuǎn)化的函數(shù)
?return modules[key]}
標(biāo)簽: