异步的模块合并管理器-m3m4版本和jquery版本(原创)
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版本(原创)的更多相关文章
- 使用 NuGet 包管理器在 Visual Studio 中安装和管理包
https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio 通过 Window ...
- javascript 模块依赖管理的本质
模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...
- 使用 Windows 包管理器 (winget) 安装 .Net
用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...
- [Web 前端] 使用yarn代替npm作为node.js的模块管理器
cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency managemen ...
- 使用yarn代替npm作为node.js的模块管理器
使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure d ...
- nodejs-npm模块管理器
JavaScript 标准参考教程(alpha) 草稿二:Node.js npm模块管理器 GitHub TOP npm模块管理器 来自<JavaScript 标准参考教程(alpha)> ...
- JS模块规范 前端模块管理器
一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- Webpack: 为Web开发而生的模块管理器[转]
Webpack: 为Web开发而生的模块管理器 原文地址:http://hanjianwei.com/2014/09/10/webpack-package-manager-for-web/ 10 Se ...
随机推荐
- Luogu 3537 [POI2012]SZA-Cloakroom
背包. 首先考虑将所有询问离线按照$m$从小到大排序,然后把所有物品按照$a$从小到大排序,对于每一个询问不断加入物品. 设$f_i$表示在组成容量为$i$的背包的所有方案中$b$最小的一个物品的最大 ...
- float在内存中的存取方法
今天做了一些题目,想到float数据如何在内存中的形式.不知道一个浮点数是如何存成32位01字符串的.下面是查找的一些资料. 我们先通过java获取这些数的二进制表示. public class De ...
- Mybatis——缓存机制
MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.缓存可以极大的提升查询效率. MyBatis系统中默认定义了两级缓存. 一级缓存和二级缓存. 1.默认情况下,只有一级缓存( ...
- xampp本地服务器+HBuilder配置php环境
HBuilder配置PHP环境: 下载,运行HBuilder编辑器 打开右侧小窗口,点击设置图标—>设置web服务器—>外置web服务器 输入你想要浏 ...
- 验证码-WebVcode
验证码的实现 <img src="../Common/WebVcode.aspx" title="看不清?点此更换" alt="看不清?点此更换 ...
- Spring中的用到的设计模式
应该说设计模式是我们在写代码时候的一种被承认的较好的模式.好的设计模式就像是给代码造了一个很好的骨架,在这个骨架里,你可以知道心在哪里,肺在哪里,因为大多数人都认识这样的骨架,就有了很好的传播性.这是 ...
- 为什么 kubernetes 天然适合微服务 (2)
此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 三.微服务化的十个设计要点 微服务有哪些要点呢?第一张图是 SpringCloud 的整个生态. 第二张图是微服 ...
- 《Thinking in Java》 10~
chapter 10 内部类(P191) 创建内部类 链接到外部类 内部类能访问器外围对象的所有成员,而不需要任何特殊条件. 使用.this与.new package cn.test; public ...
- kali linux之BurpSuite
web安全工具中的瑞士军刀,统一的集成工具发现web安全漏洞 所有的工具共享一个能处理并显示http消息的可扩展框架, 模块之间无缝交换信息. 有free版和professional版,java开发, ...
- <id name="ID"> <generator class="assigned" /> </id>
<generator>表示一个主键的生成机制.即具体通过何种方式来生成.生成方式包括:increment:生成long, short或者int类型的主键,不能在cluster环境下使用.适 ...