2

我使用 require.js - 当我使用 requiredjs 时,当我在不使用 shim 的导出模块的情况下进行控制台时,我没有得到下划线和主干。

但是 jquery 没有要求这个导出垫片依赖.. 那么,为什么我们需要使用垫片并且它是下划线和主干的导出?

这是我的代码:

requirejs.config({
    baseUrl: 'js',
    paths: {
        "jquery":'lib/jquery-1.9.1.min',
        "underscore":"lib/underscore-min",
        "backbone" : "lib/backbone-min"
    },
    shim:{
        "underscore":{
            exports: '_' 
                   //what is does here? without this i am getting undefined
        },
        "backbone":{
            exports: 'Backbone' 
                    //what is does here? without this i am getting undefined
        }
    }
});

    require(["jquery","underscore","backbone"],function ($,_,Backbone) {
        console.log($,_,Backbone);
//without shim export i am getting conosle like this:
// "function(), undefined, udefined" - why?
    });
4

1 回答 1

4

Backbone并且underscore不符合 AMD 标准,它们将自身存储在全局范围内(即在window浏览器环境中的元素中)。shimelement 允许公开它们的全局变量,就像它们是 AMD 模块一样,通过“链接”全局变量(_在下划线和BackboneBackbone 的情况下)与“虚拟”模块的“导出”部分(我称之为“虚拟”因为这是即时发生的,所以您不必更改任何代码)。

这:

"underscore":{
    exports: '_' 
}

意味着添加对“下划线”的依赖将获取对window._AMD 模块的引用并将其公开。


jQuery不需要它,因为它会检测它是否作为 AMD 模块加载并在这种情况下以符合 AMD 的方式暴露自己(向下滚动到原始源代码的最底部以获取更多详细信息)

于 2013-05-06T15:21:14.907 回答