requirejs 教程加载进来的模块,只能在回调函数内使用吗?换句话说:怎么让加载进来的模块变成全局变量?

如何动态加载功能模块
现有两个功能, a.h a.m a.xib b.h b.m b.xib
现有NSString str = @&a&;
怎么根据这个str打开a功能模块 str是可变的
------解决方案--------------------
基础库函数里面有个通过nsstring得到class的函数
看了“使用hibernate实现树形结构无限级分类”这篇文章后,我也想将自己在所有开发的项目中使用的功能模块树的实现方法以及完整DEMO(含源码)贴出来和大家分享。其实在我的博客里是老早贴出来的,由于时间关系没好好整理。 功能模块树是几乎在每个项目里都要用到的东西,利用Dojo的好处就是可以实现树的子节
字符统计功能模块
Sub TongJi() Set objFSO = CreateObject(&Scripting.FileSystemObject&) Set objFile = objFSO.OpenTextFile(&ok.txt&, 1) strText = objFile.ReadAll All = Len(strText)
做了一个列表分页的功能模块,主要的文件包括分页类 page.class.php 和 控制 ajax 分页的ajax.js,主要功能有: 1.可以选择 3 种常见的 url 分页格式; 2.可以选择 url 分页 还是 ajax 分页; 3.两种分页方式都可以自定义分页 a 标签的文字; 4.url 分页方式可以自定义分页偏移量; 5.url 分页方式可以选择手动跳转方式:手动输入页码跳转 或 下拉
之前两篇都介绍了,通过动态加载JS文件或者说JS模块,是怎么一步一步实现。
首先是通过同步策略来实现模块加载与回调函数之间进行分离,接着是通过异步策略来实现模块加载与回调函数之间进行分离。
这一篇,主要是为了说说怎么优化异步策略,并且实现了随意加载(非任意顺序加载模块),页面Ready之后加载文件。先接一下上一篇遗留下来的问题
1、页面Ready之后进行加载
2、随意添加模块 进行加载
中午的时候发了第一篇 Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块 ,发现实现上还是有问题,有很多理解不到位的地方,晚上详细解决下了,终于实现MVC各模块按需加载了,哈皮。
上篇文章中,关于ExtJs这个玩意的评论就跟java和.Net那个好一样,既然上了贼船,就难下了,而且对于企业级的应用我个人觉得Extjs框架还是不错的,尤其是没有UI设计的团队(苦逼的
android动态加载(二)
上一篇说了android中的动态加载,即在android工程中动态加载经过dx操作以后的jar文件和没有安装的apk文件,今天我们来看看怎么执行已经安装的apk中的类中的方法。 所以,我们会需要两个工程,一个是plugone,这个是我们暴露给外面的方法的一个android工程。另外一个我们暂且给他起
可以一句概括为利用动态script实现异步回调,每个模块位于独立的文件中,自行处理依赖。
//核心模块,包含加载逻辑,最下面的query模块其实也没有必要用use方法包含起来,单纯让逻辑更清晰些。 //总之,除了加载逻辑外,其他模块都写在use方法的回调函数中。模块与一般的回调函数的区别是,模块只能 //执行一次(因为没有必要重复执行),因此我们要在其里面使用arguments.callee._
我的模块加载系统 v23发布,主要改进以下
支持动态添加加载器,正确取得加载器所在的节点的路径 修正IE6加态加载模块的BUG 对parseURL进行优化,减少对正则的依赖,提高性能。 对跨域的容错更强,减少对top的访问,因为如果加载器是放在iframe中,而iframe与套嵌它的父页面不同域,就会抛错。
目前重构文档中,为了总是指向正确的路径,不得不使用document.write,这时原
SeaJS 是由玉伯开发的一个遵循 CommonJS 规范的模块加载框架,可用来轻松愉悦地加载任意 JavaScript 模块和css模块样式。SeaJS非常小巧,小巧在于压缩和gzip后体积只有4K,而且接口和方法也非常少,SeaJS 就两个核心:模块定义和 模块的加载及依赖关系。SeaJS非常强大,SeaJS可以加载任意 JavaScript 模块和css模块样式,SeaJS会保证你在使用一个
循环依赖是所有语言的加载器都是大头的问题,除非你的模块都是像spring那么利用Ioc进行控制反转,那么出现循环依赖就是死结。对此,我们唯一能做的事是,在第一个循环依赖出现时就立即通知用户查看它们的依赖列表。 在AMD大肆普及动态加载的好处后,大家应该隐藏知道有两个方法干这事。一个定义模块的define方法,另一个是加载模块的require方法。 define方法的参数为define(name?,
在上一篇javascript动态加载中,提到了使用同步加载策略这一个方式来实现如
Using(&jquery&); Using(&User&);
$(&#ID&).click(function(){ var user = new User(); user.name = &xx&; user.sh
  在Mike Taulty的视频教程中有一个动态加载silverlight应用程序的DEMO,其程序运行效果如下:
当加载dll之后:
       其实实现这个的效果本身并不难,主要是这个DEMO的应用场景可以让人做很大的扩展,比如说插 件机制等.
  好了,让我们看看如何实际去开发这个示例,以便让大家从流程和技术点上有个了解.   首
经几天思考,想到一个叫“文件与模块”的问题。我们的模块肯定写在一个JS文件中,这些模块又可以分为核心模块与外围模块。核心模块当然写在主文件中,它应该包含最重要的逻辑,加载器,列队,命名空间构造器等等。但如果一个文件只存在一个模块这也太浪费了,而且会导致请求法过多,因此出现多个模块“共生”于一个文件的情况。在主文件的那些非核心模块,我称之为内围模块。其他内围与外围没有什么区别,只是所在文件不同而已。
本版本更换更好的状态查询机制与列队机制,去除定时器检测,性能更优,体积更小,功能更强。下面是广告时间:
无阻塞加载,使用的是script标签注入方式(还有HTML5的async属性,虽然不知其到底发挥多少威力),并在脚本加载成功后自动移除这些临时生成的标签。 按需加载,每一个模块都放进一个与它同名的JS文件中,没有必要为使用某个API而载入整个框架。 每个模块自行处理依赖关系,用户不用操心调用了
最近一直为此头痛,姑且把我能想到的东西都写出来吧。由于不是简单把页面上手写的script转为javascript添加,我们需要考虑的东西主要有两个:加载的顺序,加载前后脚本的运作。 先说第一个,假如我们已有一加载机制了,要加载一个新模块,当然新模块是在另一个JS文件中。这时,我们可以描述为:
loader ---& a.js
这个加载过程可能会出些意外,如服务器忙碌等问题,暂时无法为我们
iPhone动态加载图片 实例讲解(收藏)
iPhone动态加载图片 实例讲解是本文介绍的内容。不多说了,先来看内容。官方的例子(支持3.x以上的机子)
/library/ios/#samplecode/LazyTableImages/Introduction/Intro.html
其实在iphone上面是实现图片的动态加载,其实也不是很难
$.getScript(url,callback)
这个方法是jquery自身提供的一个用于动态加载js的方法。当网站需要加载大量js时,动态的加载js就是一个比较好的方法,当需要某个功能时再将相应的js加载进来。 但是自己在使用过程中却发现了一些不尽如意的地方。
每次需要执行该功能的时候都会去请求一次这个js,这样不是在帮倒忙嘛? 于是找到Jquery官网的API说明
模块加载系统是我框架的核心模块的一部分,与domReady彻底地整合在一起。当然核心模块还提供了其他常用方法,如数组化,类型判定,简单的事件绑定...本版本有以下改进:
HTML5 History API带来颖新的“改变URL不刷新页面”技术,可能会让我的其核心模块找不到我的动态命名空间(DOC.URL.replace(/(\W|(#.+))/g,'')),因此添加onpopstate事件来同步
终于实现动态加载JDBC驱动-oralce
终于实现动态加载JDBC驱动-oralce
配置文件: oracle.properties jdbc.driver=oracle.jdbc.driver.OracleDriverjdbc.url=jdbc:oracle:thin:@192.168.2.67:1521:xtjdbc.user=sajdb
动态加载图片许多方法。第一种方法,随便创建一个块状元素如DIV,把它加入DOM树,然后用CSS设置背景图片。第二种前半部分同第一种,只不过这次用innerHTML加一张图片变成它的子元素。第三种,利用createElement(&img&),然后加入DOM与指定它的src属性。第四种,new Image对象,然后加入DOM与指定它的src属性。
window.onload =
mass Framework的加载器v19发布,本版本的更新如下:
去掉对CMD的支持,CMD是一种对压缩不友好的机制 去掉debug方法,这改为由外围模块提供此功能 增加循环依赖的检测,一旦发现立即抛错,更有利于大规模开发 修改几处throw,不直接throw字符串,改抛错误对象,方便中文错误信息不至于乱码 Module._resolve 改为 parseURL,增加调试消息,以后将逐步移除M
模块系统是我框架的核心模块的一部分,与domReady彻底地整合在一起。当然核心模块还提供了其他常用方法,如数组化,类型判定,简单的事件绑定...本版本主要是对类型判定进行优化与重写模块加载,以更优雅的方式处置循环依赖的问题。
(function(global,DOC){ var _dom = global.dom, hash = &#&, namespace = escap
本版本的重要更新是完全实现AMD规范。整个框架根据此新加载器重写,因此可以方便调用老外用AMD规范写好的JS库了.
日志打印可以通过设置$.core.level排除某些不重要的日志打印。 添加config方法来设置框架的一些重要信息或对模块进行别名。 在VS系列实现智能提示。
有关本模块加载系统的使用,可以到这里详看教程.新加载器是同时支持AMD与玉伯搞的seajs的CMD.如果你在模块定义中
// 动态加载外部js文件 var flag = if( flag ){ loadScript( &js/index.js& ); }; function loadScript( url ){ var script = document.createElement( &script& ); script.type = &
android动态加载已安装和未安装的apk资源
在android开发中动态加载已安装和未安装的apk资源,是很有用的,可以用来实现换肤功能等等。今天我们来学习。
首先新建一个工程plugpicinstall,我们需要往该工程的ass
android中ListView动态加载更多checkbox的问题 最近在实现一个checkbox动态加载到listview中的问题,网上看到一个功能差不多的demo,我添加了一个more的button,具体代码如下:
publicclassMainActivityextendsActionBarActivity{
iPhone table 实现动态加载图片的教程
iPhone table 实现动态加载图片的教程iPhone在加载列表时,如果每个等待把所有列表中的数据都加载完在显示相关内容,如果列表中有一些比较大的图片,加载的时间比较长,那么给用户的效果就很差了,下面详细是一种实现动态加载图片的办法:
- (UITableViewCell *)tableView:(UITableView *)tableV
动态加载与页面拉动问题
像美柚这个首页,上面一块显示的信息的(红色那块),下面信息可以一直往下拉,而且往下拉时,上面红色部分也会跟着拉,要怎么实现?
如果是下面listview的话,拉的时候上面红色部分会固定住。
------解决思路---------------------- 没用过,不知道。
不过,你所说的跟着往下滑,应该只是一个动态效果。
你可以把它做成一个浮动层,当下面lis
比如说PECL里有两个Memcached的模块, Memcache和 Memcached,目前大部分PHP环境里使用的是名字里不带d的Memcache版本,这个版本释出的比较早,是一个原生版本,与之对应的带d的Memcached版本则是建立在 libmemcached的基础上,所以说Memcached版本的功能更全一些。
安装Memcached版本的PHP模块
wget http://dow
本版本最大的改进就引入强大的调试机制。如果一个框架使用了模块加载后,迎来的最大问题莫过于调试。由于有了模块化,因此不需要担忧体积的问题,因此大放手脚伸入前端各个领域去,JS文件暴涨,也意味着API数量瀑涨,就像jQuery那一点儿API有的人都记不全,更别说像EXT,YUI,dojo这样的巨无霸了。对于这个方法是在A模块还是B模块,我们在调用时还可以查一查,但出错时,就未必出A模块或B模块内,A模
有时候,我们可能不会在网页中&script src=&jquery.min.js& 来加载 Jquery 库,可能在用户点击某个按钮后,才去加载 Jquery 库。好处不用我说,节省带宽,提高访问速度,因为用户可能不会点击这个按钮,也就不需要 Jquery 。那么如何动态加载 Jquery 库呢?一般可以用 Document.write 来打印出,也可以用 Ajax ,也
linux下用GDB调试可加载模块
参考文章:.freebsd.org/doc/zh_CN.GB2312/books/developers-handbook/kerneldebug-kld.html
这篇文章主要是对参考文章的简单整理,大同小异 。
首先,需要在编译模块时加入调试信息。两种方式,一种是编译时使用“make COPTS-g”,另一种是
Linux内核模块是一种可被动态加载和卸载的可执行程序。通过内核模块可以扩展内核功能,内核模块通常用于设备驱动、文件系统等。如果没有内核模块,需要向内核添加功能就需要自发代码、重新编译内核、安装新内核等步骤。 内核空间中不止一个程序试图访问驱动程序模块,导致一个内核块在没有被调用完毕之前又被其他程序调用,这称之炒代码的重入。因此在设计驱动模块的数据结构时要考虑数据结构在多线程环境下不被其他线程破坏
Extjs动态加载树,首先在数据库里面设计存放树信息的表
USE [KimiExtjs] GO /****** 对象: Table [dbo].[Trees] 脚本日期: 04/08/:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO C
mass Framework的加载器v20发布,本版本的更新如下:
参考requireJS的实现,去掉iframe的加载机制 内部install方法改名更语义的fireFactory 最后回调的临时模块名的前缀由&@cb&改成&cb&,防止在旧式IE使用userData时出错
从v19起,define与require已经完全独立成全局函数,不再依赖于$了
我的模块加载系统也终于到11这样高的版本了,随着它的完成,其他模块也加快了进RC的发布表,文档撰写工作也在跟进中。在本文的最后,我会提供dom Framework的部分文档下载(CHM文件)。 本版本有以下改进:
强化dom.require,如果这个回调代表的是模块,则只允许执行一次,如果是这个回调是用户指定的正向回调,则可以执行无数次。 强化对window的判定,相关讨论见这里与这里。 移除d
模块加载系统是我框架的核心模块的一部分,与domReady彻底地整合在一起。当然核心模块还提供了其他常用方法,如数组化,类型判定,简单的事件绑定...本版本有以下改进:
dom.mix可以处理多个对象的糅合了 dom.type在chrome可以更快地检测chrome 添加unbind,与bind组成一组对应方法 修正appendScript的一个错误,是dom[&@debug&quot
模块加载系统是我框架的核心模块的一部分,与domReady彻底地整合在一起。当然核心模块还提供了其他常用方法,如数组化,类型判定,简单的事件绑定...本版本有以下改进:
将define的大部分转交require去处理,define只处理参数。 将内部两个处理依赖关系的对象status与checks改进为轻捷的dom[&@modules&]与names。 改进resolveCa
模块加载系统是我框架的核心模块的一部分,与domReady彻底地整合在一起。当然核心模块还提供了其他常用方法,如数组化,类型判定,简单的事件绑定...本版本有以下改进:
更改隐藏的命名空间escape(DOC.URL.split(&#&)[0]),为DOC.URL.replace(/(#.+|\W)/g,'');。这个命名空间被其他框架占有的机率几乎为零。 强化dom.log
一、动态加载表格
1.首先在html中为表格的添加位置设置id
即是在html的body标签内部写一个div标签表明表格要添加到此div的内部。如下
&div id=&tdl&&&div&
2.在javascript中写添加表格的语句
若在当前html文件中,则写在&script&标签内部,如模块加载器_前端大全-爱微帮
&& &&& 模块加载器
(点击上方公众号,可快速关注)来源:卖烧烤夫斯基链接:/constantince/p/5374371.html最近在做新项目的时候自己利用一点业余时间写了一个简单的js模块加载器。后来因为用了webpack就没有考虑把它放到项目里面去,也没有继续更新它了。模块加载器开源的有很多,一般来说seaJS和reqiureJS都能满足基本需求。本篇博文主要分享一下卤煮写这个加载器的一些想法和思路,作为学习的记录。js模块化加载已经不是一个新鲜概念了,很多人都一再强调,大型项目要使用模块化开发,因为一旦随着项目的增大,管理和组织代码的难度会越来越难,使得我们对代码的管理变得重要起来。当然,在后端模块化已经相当成熟,而作为前端的模块化概念,是很久之后才提出来的。模块化好处是使得代码结构更加清晰,高的内聚,功能独立,复用等等。在服务端,随着nodejs 的兴起,js模块化被越来越多地引起人们的注意。但是对于后端和前端来说,最大的区别就是同步和异步加载的问题,因为服务器上获取模块是不需要花费很多的,模块加载进来的时间就操作系统文件的时间,这个过程可以看成是同步的。而在浏览器的前端却需要发送请求到服务器来获取文件,这导致了一个异步延迟的问题,针对这个问题,以AMD规范的异步模块加载器requireJS应运而生。加载原理以上简单介绍了一下前端模块化的历程,下面主要介绍一下模块加载主要原理:1. createElement(‘script’)和appendChild(script) 动态创建脚本,添加到head元素中。2. fn.toString().match(/.require((“|’)[^)]*(“|’))/g) 将模块转换为字符串,然后通过正则表达式,匹配每个模块中的的依赖文件。3. 建立脚本加载队列。4.递归加载,分析完依赖之后,我们需要按照依赖出现的位置,将它们加载到客户端。5.为每一个命名的模块建立缓存,即 module[name] =6.currentScript : 对于匿名模块,通过currentScript 来获取文件名,存入到缓存中。下面贴出对应主要的代码:一、动态创建脚本创建脚本较为简单,主要是用createElement方法和appendChild。在创建脚本函数中,我们需要为该脚本绑定一个onload事件,这个事件是为了通知加载脚本队列执行的时间,告诉它什么时候可以加载下一个js文件了。function _createScript(url) { //创建script var script = doc.createElement('script'); var me = //设置属性为异步加载 script.async = script.src = url + '.js'; //为脚本添加加载完成事件 if ('onload' in script) { script.onload = function(event) { return _scriptLoaded.call(me, script); }; } else { script.onreadystatechange = function() { if (/loaded|complete/.test(node.readyState)) { me.next(); _scriptLoaded(script); } }; } //加入script head.appendChild(script);}二、分析依赖建立分析依赖是模块加载器中最重要的环节之一。每个模块可能会依赖不同的模块,我们需要理清楚这些模块之间的依赖关系,然后分别将它们加载进来。为了分析依赖关系,我们使用toString的方法,将模块转化为一个string,然后去其中寻找依赖。function _analyseDepend(func) { //匹配依赖,所有在.reqiure()括号内的依赖都会被匹配出来。 var firstReg = /.require((&|')[^)]*(&|'))/g, secondReg = /((&|')[^)]*(&|'))/g, lastReplaceRge = /((&|')|(&|'))/g; //将模块字符串化 var string = func.toString(); var allFiles = string.match(firstReg); var newArr = []; if (!allFiles) { return ''; } //将依赖的文件名存入一个堆栈内 allFiles.map(function(v) {  //对文件名做处理 var m = v.match(secondReg)[0].replace(lastReplaceRge, ''); //只有在异步加载的情况下需要 返回解析依赖 if(!modules[_analyseName(m)]) { newArr.push(m);
} }); if(newArr.length & 0) { return newA }else{ return '' }}三、建立脚本加载队列分析完依赖之后,我们可以得到一个脚本名称的栈,我们从其中获取脚本名称,依次按照顺序地加载它们。因为每个脚本加载过程都是异步的,所以,我们需要有一个异步加载机制。在这里,我们使用了设计模式中的职责链条模式来完成整个异步加载过程。通过在onload事件通知队列加载的完成情况。下面是职责链模式的实现代码function _Chain() {& & this.cache = [];}/**&* add function to order stack&* @param func (func)&* @returns {_Chain}&*/_Chain.prototype.after = function(fn) {& & & & this.cache.push(fn);& & & & this.cur = 0;& & & && & }& & /**& & &* To pass the authority to next function excute& & &* @param& & &* @returns& & &*/_Chain.prototype.passRequest = function() {& & & & var result = 'continue';& & & & while (this.cur & this.cache.length && result === 'continue') {& & & & & & result = this.cache[this.cur++].apply(this, arguments);& & & & & & if (this.cur === this.cache.length) {& & & & & & & & this.clear();& & & & & & }& & & & }& & }& & /**& & &* an api to excute func in stack& & &* @param& & &* @returns& & &*/_Chain.prototype.next = function() {& & & & this.excute();& & }& & /**& & &* let use to excute those function& & &* @param& & &* @returns& & &*/_Chain.prototype.excute = function() {& & this.passRequest.apply(this, arguments)}/**&* to clear stack all function&* @param&* @returns&*/_Chain.prototype.clear = function() {& & this.cache = [];& & this.cur = 0;}var excuteChain = new _Chain();每个脚本加载完毕后调用next函数,可以通知职责链中的下一个函数继续执行,这样解决了异步加载问题。这里将模式的实现代码放到模块加载器中是不太合适的,一般情况下我们可以将它独立出来,放入公共模块当中,为其他的模块共同使用。但这里纯粹是一个单文件的项目,所以就暂时将它放入此处。四、递归加载根据模块中的依赖出现的次序,依次加载各个模块。function _excuteRequire(depends) { if (depends.length === 0) { var u = excuteStack. while (u--) { var params = excuteStack[u](); if (u === 0) { Events.trigger('excute', params); excuteStack = []; } } }}五、为模块建立缓存对象//在文件加载完毕后将模块存入缓存return modules[string] = func();六、currentScriptcurrentScript主要是用来解决获取那些未命名的模块的js文件名,如 define(function(){})这样的模块是匿名的,我们通过这个方法可以获取正在执行的脚本文件名,从而为其建立缓存。function _getCurrentScript() { //取得正在解析的script节点 if (doc.currentScript) { //firefox 4+ return doc.currentS } }七、定义module最后我们需要做的事给出定义模块的方法,一般情况下定义方法主要分以下几种:1.define(‘a’, function(){})2.define(function(){})第一种是命名的模块,第二种是未命名的模块,我们需要对它们分别处理。用typeof方法分析参数,建立以string方法为基础的加载模式:function define() {& & var arg = Array.prototype.slice.call(arguments);& & var paramType = Object.prototype.toString.call(arg[0]).split(' ')[1].replace(/]/, '');& & defineParamObj[paramType].apply(null, arg);& & // Chain.excute();}function _String(string, func) {& & string = _analyseName(string);& & //分析依赖& & var depends = _analyseDepend(func) || [];& & // 将加载好的模块存入缓存& & excuteStack.push(function() {& & & & return modules[string] = func();& & });& & //执行加载依赖函数& & _excuteRequire(depends);& & for (var i = 0, l = depends. i & i++) {& & & & (function(i) {& & & & & & excuteChain.after(function() {& & & & & & & & var c = require(depends[i]);& & & & & & & & if(c) {& & & & & & & & & & this.next();& & & & & & & & };& & & & & & });& & & & })(i);& & }}function _Function(func) {& & var name = _analyseName(_getCurrentScript().src);& & _String(name, func);}结束以上就是一个实现模块加载器的主要原理,卤煮写完发现也只有四百行的代码,实现了最基本的模块加载功能。当然,其中还有很多细节没有实现,比起大而全的requireJs来说,只是一个小儿科而已。但是明白了主要这几项后,对于我们来说就足够理解一个模块加载器的实现方式了。代码存入github上: /constantince/require【今日微信公号推荐↓】更多推荐请看《》其中推荐了包括技术、设计、极客&和&IT相亲相关的热门公众号。技术涵盖:Python、Web前端、Java、安卓、iOS、PHP、C/C++、.NET、Linux、数据库、运维、大数据、算法、IT职场等。点击《》,发现精彩!
点击展开全文
分享 Web 前端相关的技术文章、工具资源、精选课程、热点资讯
您的【关注和订阅】是作者不断前行的动力
本站文章来自网友的提交收录,如需删除可发送邮件到 bang@ 或联系QQ ,
(C)2014&&版权所有&&&|&&&
京ICP备号-2&&&&京公网安备34浅谈模块化加载的实现原理-前端开发博客
5,515Views
5,133Views
3,991Views
3,476Views
3,436Views
3,199ViewsLoad timeout for modules with requirejs [加载超时与requirejs模块] - 问题-字节技术
Load timeout for modules with requirejs
加载超时与requirejs模块
问题 (Question)
I'm using requirejs to load some libraries and dependencies.
When I just load jQuery, it's working perfectly:
require.config({
exports: '$'
jquery: 'vendor/jquery'
'vendor/jquery',
'app/init'
app/init.js
['jquery'],
function ($) {
$(document).ready(function () {
console.log('domready');
But when I try to add underscore, in the network panel the file is correctly loaded but in the console I get a
Uncaught Error: Load timeout for modules: underscore
What's happening?
I also tried the waitSeconds: 200 options inside the require.config without any success.
Below the final (broken) code as a reference:
require.config({
exports: '$'
underscore: {
exports: '_'
jquery: 'vendor/jquery',
underscore: 'vendor/underscore',
'vendor/jquery',
'vendor/underscore',
'app/init'
app/init.js
['jquery', 'underscore'],
function ($, _) {
$(document).ready(function () {
console.log('domready');
我使用requirejs加载一些图书馆和依赖关系。当我刚加载jQuery,工作完美:main.jsrequire.config({
exports: '$'
jquery: 'vendor/jquery'
'vendor/jquery',
'app/init'
app / init.jsdefine(
['jquery'],
function ($) {
$(document).ready(function () {
console.log('domready');
但是当我试图添加下划线,网络中的面板控制台中的文件被正确加载但是我得到一个未捕获错误:模块加载超时:下划线发生什么事情了?我也尝试过waitSeconds:200选项要求内。配置不成功。下面最后(破碎)代码作为参考:main.jsrequire.config({
exports: '$'
underscore: {
exports: '_'
jquery: 'vendor/jquery',
underscore: 'vendor/underscore',
'vendor/jquery',
'vendor/underscore',
'app/init'
app / init.jsdefine(
['jquery', 'underscore'],
function ($, _) {
$(document).ready(function () {
console.log('domready');
最佳答案 (Best Answer)
In define and require calls you sometimes refer to your modules as "vendor/&name of module&" and sometimes as "&name of module&". This is wrong. Based on the config you show you should refer to your modules as "&name of module&" in all require and define calls. So always refer to jQuery and Underscore as "jquery" and "underscore", not "vendor/.... When you refer to them with the full path you bypass the shim configuration.
Actually, you can change your require call to:
require(['app/init']);
You don't need to refer to jQuery and Underscore there. They will be loaded when app/init.js is loaded due to the define there requiring them.
(Also, relatively recent versions of jQuery don't need a shim because jQuery detects that it is loaded by an AMD-compatible loader and calls define itself. This is not the source of your problem but it is good to know.)
在define和require有时打电话给你参考你的模块"vendor/&name of module&"和有时"&name of module&"。这是错误的。基于配置你显示你应该参考你的模块"&name of module&"总共require和define调用。所以总是把jQuery和下划线"jquery"和"underscore",而不是"vendor/...。当你引用的完整路径绕过shim配置。实际上,你可以改变你require调用:require(['app/init']);
本文翻译自StackoverFlow,英语好的童鞋可直接参考原文:

我要回帖

更多关于 requirejs下载 的文章

 

随机推荐