Requirejs 中有什么地方是必须用 require 的?
发布于 11 年前 作者 yakczh 5780 次浏览 最后一次编辑是 8 年前

define / require 都处理依赖关系, 都会立即执行函数体内的代码, 比如函数中内 require(['someModule],fucntion(){ 这个 module 直接写在 define 的依赖数组里也可以的, 那有什么地方是必须用 require 方法的?

4 回复

不懂楼主问题是什么…

没有什么地方必须用require,但是两者的意义是不一样的。 定义模块需要用define,而不是require。 如果是requirejs的程序入口,则是用require更合适。 当然你把define当做require来用也没什么,但感觉那样就不make sense了

我的问题是define和require的具体使用方法的区别和适用场合, 我试了一下define只能加载debine包装起来的库 ,非规范的只能用require来用,require可以加载包装和非包装的库,兼容性更好 只要是全是规范的模块,全部用define就可以搞定,入口用define一样立即执行 简单总结一下define用在符合规范的地方,require用来处理兼容, 另外还有一个注意的地方是require是异步,相当于程序中的过程,require不能用在接受结果的地方,举个例子

modA.js
---------------------
define([], function( template) {
    var modA = {
        html:'',
        render: function() {
            var T=this;
            require(['handlebars'],function(){  
            var tpl='  hello  {{ title }}  ';
            var data = {"title": "Story"};
            var compiledTemplate = Handlebars.compile(tpl);
                T.html = compiledTemplate(data);
                console.log(' inside require'+ T.html );
               return T.html;
                //return html;
           });
          
        }
    };

    return modA;
});

load-page.js
-----------------------
define(['modA'],function (t)
{
   var out=t.render();
console.log(out);
    console.log(t.html);  
  
setTimeout(function name()
{
  console.log(t.html);
},3000);
});

模板在require里面有值,但是因为异步的关系,主页面执行取不到返回的值,还有require里面的this也要小心,总之处理兼容就要小心各种坑

我去,是我肤浅了。原来require还可以这么用。。。

PS:虽然说可以这么用,使用场景还是很有限,至少对于我来说。 考虑到最后会用uglifyJS打包,这种require的使用方式应该不会被打包进去吧(这里不太清楚。。O.O)

回到顶部