AndreGeng / AndreGeng.github.io

blog repository
1 stars 0 forks source link

Node.js设计模式 #24

Open AndreGeng opened 5 years ago

AndreGeng commented 5 years ago
  1. node架构 image

  2. node模块加载伪代码

    
    function loadModule(filename, module, require) {
    const wrappedSrc = `(function(module, exports, require) {
    ${fs.readFileSync(filename, 'utf8')}
    })(module, module.exports, require)`;
    eval(wrappedSrc);
    }
    const require = (moduleName) => {
    console.log(`require invoked for module: ${moduleName}`);
    const id = require.resolve(moduleName);
    if (require.cache[id]) {
    return require.cache[id].exports;
    }
    // module metadata
    const module = {
    exports: {},
    id: id,
    };
    // Update the cache
    require.cache[id] = module;
    // load the module
    loadModule(id, module, require);
    // return exported variables
    return module.exports;
    };
    require.cache = {};
    require.resolve = (moduleName) => {
    /* resolve a full module id from the moduleName */
    }

从伪代码中可以看出以下几点:
1. 模块的加载是有缓存的
2. 当两个模块存在**循环依赖**时,可能会出现**加载的模块代码不完整**的问题。