requirejs的局部require的疑问

define(function(require){
    if(false){
        var $ = require("jquery");
    }
});

我发现,即使require("jquery")这个语句没有执行,可jQuery仍然被加载了,这是咋回事。难道requirejs中的局部require仅仅是为了写代码方便,本质上与写在define里没区别?

阅读 2.8k
3 个回答

这里涉及到脚本加载顺序问题:

首先,js文件加载顺序。如果说 jquery 比 requirejs 先加载的话,那么 $ 就是一个全局性的(即 window.$);在哪都可以直接使用。

其次,如果 requirejs 比 jquery 优先加载,那么当在加载 jquery 时,会发现,咦,原来允许CommonJS规范定义,那么就不会把 $ 挂到 window 下面,你只能通过 require('jquery') 之类来调用。

这个requirejs源码是去吧模块代码转化为字符串,然后去正则匹配require标记。这样其实不是你动态运行的值,所以你即使没有执行require语句,但是requirejs在扫描js代码时发现了requrire,还是会加载对应js

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题