m3m4版本

(function(w){
    var loading={}
    var models={}

    function define(name,args){
        loading[name]=true
        models[name]=args
    }
    function require(name,callback){
        var next=function(){
            require(name,callback)
        }
        if(loading[name]&&models[name].length==1){
            models[name]=models[name][0]()
            loading[name]=false
        }
        //解析
        if(loading[name]&&models[name].length>1){
            var args=models[name]
            var func=args.pop()
            var len=args.length
            var dataArr=[]
            for(var i=0;i<args.length;i++){
                var model=args[i]
                require(model,function(data){
                    dataArr.push(data)
                    if(--len==0){
                        var sync=args.indexOf("$callback")
                        if(sync==-1){
                            models[name]=func.apply(this,dataArr)
                            loading[name]=false
                            next()
                        }else{
                            dataArr[sync]=function(back){
                                models[name]=back
                                loading[name]=false
                                next()
                            }
                            func.apply(this,dataArr)
                        }
                    }
                })
            }
        }else{
            callback(models[name])
        }
    }
    w.m3m4=function(func){
        func(define,require)
    }
})(typeof window!="undefined"?window:global)

demo1

m3m4(function(define,require){
    define("a",[function(a){
        return "a"
    }])
    define("b",["a","$callback",function(a,callback){
        console.log(a)
        setTimeout(function(){
            callback("b sync")
        },1000)

    }])
    define("c",["$callback","a","b",function(callback,a,b){
        console.log(b)
        console.log(a)
        setTimeout(function(){
            callback("c sync")
        },1000)

    }])
    require("c",function(c){
        console.log(c)
    })
})

  

 

 jQuery版本

(function($){
    var loading={}
    var models={}

    function define(name,args){
        loading[name]=true
        models[name]=args
    }
    function require(name,callback){
        var next=function(){
            require(name,callback)
        }
        if(loading[name]&&models[name].length==1){
            models[name]=models[name][0]()
            loading[name]=false
        }
        //解析
        if(loading[name]&&models[name].length>1){
            var args=models[name]
            var func=args.pop()
            var len=args.length
            var dataArr=[]
            for(var i=0;i<args.length;i++){
                var model=args[i]
                require(model,function(data){
                    dataArr.push(data)
                    if(--len==0){
                        var sync=args.indexOf("$callback")
                        if(sync==-1){
                            models[name]=func.apply(this,dataArr)
                            loading[name]=false
                            next()
                        }else{
                            dataArr[sync]=function(back){
                                models[name]=back
                                loading[name]=false
                                next()
                            }
                            func.apply(this,dataArr)
                        }
                    }
                })
            }
        }else{
            callback(models[name])
        }
    }
    $.define=define
    $.require=require
})($)

  demo2

var define= $.define
var require= $.require
define("a",[function(a){
    return "a"
}])
define("b",["a","$callback",function(a,callback){
    console.log(a)
    setTimeout(function(){
        callback("b sync")
    },1000)

}])
define("c",["$callback","a","b",function(callback,a,b){
    console.log(b)
    console.log(a)
    setTimeout(function(){
        callback("c sync")
    },1000)

}])
require("c",function(c){
    console.log(c)
})

  

异步的模块合并管理器-m3m4版本和jquery版本(原创)的更多相关文章

  1. 使用 NuGet 包管理器在 Visual Studio 中安装和管理包

    https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio 通过 Window ...

  2. javascript 模块依赖管理的本质

    模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...

  3. 使用 Windows 包管理器 (winget) 安装 .Net

    用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...

  4. [Web 前端] 使用yarn代替npm作为node.js的模块管理器

    cp from : https://www.jianshu.com/p/bfe96f89da0e     Fast, reliable, and secure dependency managemen ...

  5. 使用yarn代替npm作为node.js的模块管理器

    使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e     Fast, reliable, and secure d ...

  6. nodejs-npm模块管理器

    JavaScript 标准参考教程(alpha) 草稿二:Node.js npm模块管理器 GitHub TOP npm模块管理器 来自<JavaScript 标准参考教程(alpha)> ...

  7. JS模块规范 前端模块管理器

    一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...

  8. 在SSIS 的 64 位版本中不支持 Excel 连接管理器

    Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...

  9. Webpack: 为Web开发而生的模块管理器[转]

    Webpack: 为Web开发而生的模块管理器 原文地址:http://hanjianwei.com/2014/09/10/webpack-package-manager-for-web/ 10 Se ...

随机推荐

  1. 9.TOP 子句--mysql limit

    TOP 子句 TOP 子句用于规定要返回的记录的数目. 对于拥有数千条记录的大型表来说,TOP 子句是非常有用的. 注释:并非所有的数据库系统都支持 TOP 子句. MySQL 语法 SELECT c ...

  2. (回溯法)ip地址的合理性

    题目: 给定一个只包含数字的字符串,通过返回所有可能有效的IP地址组合来恢复它. 例如: 给定“”, return [“255.255.11.135”,“255.255.111.35”]. (顺序无所 ...

  3. HDU 3365 New Ground (计算几何)

    题意:给定点A[0~n-1]和B[0],B[1],A[0].A[1]映射到B[0].B[1],求出其余点的映射B[2]~B[n-1]. 析:运用复数类,关键是用模板复数类,一直编译不过,我明明能编译过 ...

  4. 编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员

    建议33:避免在泛型类型中声明静态成员 在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList&l ...

  5. poj1840 Eqs(hash+折半枚举)

    Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...

  6. 三解炸弹人——DFS

    原创 枚举解炸弹人—— https://www.cnblogs.com/chiweiming/p/9295262.html BFS解炸弹人—— https://www.cnblogs.com/chiw ...

  7. 巧用Scrum与Kanban

    本文来自网易云社区 文\屈鹏飞 在互联网行业的项目管理实践中,敏捷和精益一直是大家所提倡的思想,其中Scrum和Kanban方法作为即敏捷又精益的典型代表,许多PM都在研究,笔者近期也在学习和实施Sc ...

  8. IIS发布的网页上传文件被拒绝

    在IIS所在的服务器共享的权限(如下图示,但注意不是加everyone)和共享文件夹的权限里都加上IIS_USER完全控制,如果不行再加上NETWORK SERVICE权限

  9. .NET clickonce修改发布名称等

    见图

  10. 18、OpenCV Python 简单实现一个图片生成(类似抖音生成字母人像)

    __author__ = "WSX" import cv2 as cv import numpy as np def local_threshold(img): #局部阈值 gra ...