define(function(require){
if(false){
var $ = require("jquery");
}
});
我发现,即使require("jquery")这个语句没有执行,可jQuery仍然被加载了,这是咋回事。难道requirejs中的局部require仅仅是为了写代码方便,本质上与写在define里没区别?
define(function(require){
if(false){
var $ = require("jquery");
}
});
我发现,即使require("jquery")这个语句没有执行,可jQuery仍然被加载了,这是咋回事。难道requirejs中的局部require仅仅是为了写代码方便,本质上与写在define里没区别?
这里涉及到脚本加载顺序问题:
首先,js文件加载顺序。如果说 jquery 比 requirejs 先加载的话,那么 $
就是一个全局性的(即 window.$);在哪都可以直接使用。
其次,如果 requirejs 比 jquery 优先加载,那么当在加载 jquery 时,会发现,咦,原来允许CommonJS规范定义,那么就不会把 $ 挂到 window
下面,你只能通过 require('jquery')
之类来调用。
这个requirejs源码是去吧模块代码转化为字符串,然后去正则匹配require标记。这样其实不是你动态运行的值,所以你即使没有执行require语句,但是requirejs在扫描js代码时发现了requrire,还是会加载对应js
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
是的,请看这里: http://requirejs.org/docs/api... (从 or better yet开始)
requirejs的CMD只是一个语法糖,本质仍是AMD