requirejs原理解析

核心

require的核心是define函数和require函数
define 函数导出模块
require 引入模块

使用

  1. 同时require多个模块,没有多层依赖
define('module1',[],function(){
    return '模块一'
})
define('module2',[],function(){
    return '模块二'
})
require(['module1','module2'],function(module1,module2){
    console.log(module1,module2,15);//'模块一','模块二'
})
  1. 多层依赖
define('module2',['module1'],function(module1){
    return module1+' module2'
})
define('module3',['module2'],function(module2){
    return module2+' module3'
})
require(['module3'],function(module3){
    console.log(module3);
})

简单实现

let factorys={};
function define(moduleName,dependencies,fn){
    factorys[moduleName]=fn;//让模块名称和函数对应起来
}
function require(mods,callback){
    let res=mods.map((mod)=>{
        return factorys[mod]();
    })
    console.log(res)
    callback.apply(null,res)
}
  • 以上代码没有实现依赖的情况,继续补充
define('module2',['module1'],function(module1){
    return module1+' module2'
})
define('module3',['module2'],function(module2){
    return module2+' module3'
})
require(['module3'],function(module3){
    console.log(module3);
})

最终实现(递归)

let factorys={}
function define(moduleName,dependenties,fn){
    factorys[moduleName]=fn;
    fn.dependenties=dependenties;//把依赖挂载到当前要执行的函数上
}
function require(deps,callback){
    let res=deps.map((dep)=>{//moduleName
        let result;
        let fn=factorys[dep]
        if(fn.dependenties.length>0){//如果有依赖
            require(fn.dependenties,function(){//递归
                result = fn.apply(null,arguments)
            })
        }else{
            result=fn();
        }
        return result
    })
    callback.apply(null,res)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • https://www.cnblogs.com/HCJJ/p/6611669.html requireJS 可以很...
    小杺阅读 861评论 0 3
  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宫若石阅读 1,126评论 0 1
  • 05年夏天,我还在广东,那是金美花园的一家湘菜馆,我在里面当服务员,工资不高,我不会存钱,嘴巴又好吃。每到发工资...
    冯小小_阅读 1,075评论 4 6
  • 我的生活方式是松散的,所以现在要把她归笼似乎有点难,可是我还是要这样去做。我不想结果 ,只想行动起来!
    书侬阅读 323评论 0 0
  • 木有霹雳手段相伴,你的菩萨心肠就是无能 放假第14天。 纠缠不休的依旧在继续,痛苦挣扎的一直在煎熬。 今天又打了一...
    平阳山人阅读 221评论 -1 3