加载了jQuery,下划线和利用骨干RequireJS 2.0.1和垫片(Loading jQuer

2019-07-29 16:40发布

我尝试用RequireJS 2.0.1一点点。 我的目标是正确地进行负载的jQuery,下划线和骨干。 从最初的RequireJS文档中我发现作者J. Burke补充(到这个新版本)一个名为垫片新的配置选项 。

然后我在这里写下来这个东西:

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Testing time</title>
        <script data-main="scripts/main" src="scripts/require.js"></script>
    </head>
    <body>
        <h1>Testing time</h1>
    </body>
</html>

scripts/main.js

requirejs.config({
    shim: {
        'libs/jquery': {
            exports: '$'
        },
        'libs/underscore': {
            exports: '_'
        },
        'libs/backbone': {
            deps: ['libs/underscore', 'libs/jquery'],
            exports: 'Backbone'
        }
    }
});


define(
    ['libs/jquery', 'libs/underscore', 'libs/backbone'],

    function (jQueryLocal, underscoreLocal, backboneLocal) {
        console.log('local', jQueryLocal);
        console.log('local', underscoreLocal);
        console.log('local', backboneLocal);
        console.log('global', $);
        console.log('global', _);
        console.log('global', Backbone);
    }
);

一切似乎都工作得很好,但我有我失去了一些东西的感觉,我知道有jQuery和下划线的AMDed版本,但如果安装是如此简单,我不明白为什么我应该使用它们。

那么,这种设置对还是我失去了一些东西?

Answer 1:

你只需要使用“中间层”的配置如果库已经不调用define()声明的模块。 jQuery的已经做了这个,所以你可以从垫片配置删除。 上面的代码将工作是,但是对jQuery的出口垫片配置将因为jQuery的忽视将调用define()垫片工作完成之前。

与垫片VS具有脚本调用的缺点define()来定义一个模块:

  1. 这是不太便携/可靠:每个开发人员需要做的垫片配置,并跟踪库的变化。 如果库的作者做它内嵌在库中,每个人都更有效地得到好处。 在代码模板umdjs / UMD可以用代码更改帮助。

  2. 次优的代码加载:垫片配置工程通过加载垫片DEPS加载实际库之前。 因此,它是一个比较顺序装载比并行。 这是更快,如果所有脚本可以并行,这是可能的,当被加载define()被使用。 如果你的最终部署构建/优化和所有脚本合并为一个脚本,那么这是不是一个真正的缺点。



Answer 2:

你在做什么是正确的,但jQuery的并不需要在垫片的配置,因为它出口的AMD (异步模块定义)模块。 下划线删除其对AMD / Require.js支持其加入后能迅速,请参阅: 为什么underscore.js对AMD去除支持

沉旨在为使用不导出AMD模块库提供了方便。 如果您使用的是库不支持AMD,或有2个版本(支持AMD,另一个是一个全局变量),你应该使用AMD版本。 您应该使用AMD版本供您将使用AMD摆在首位,也是同样的原因,因为库可以包括require.js(或杏仁在它的源)和会增加不必要的文件大小到您的项目。



Answer 3:

实际上,你可以避开原来的例子(jQuery的路径设置为“库/ jQuery的”)“匀场” jQuery的,因为jQuery的在他们的AMD模块定义添加了名为“jQuery的”?

定义( “jquery的 ”,[],函数(){返回的jQuery;});

我的经验是,你需要把jquery.js和在目录中的BaseURL拿到预期中定义的jQuery的AMD模块,或“垫片”它像在原来的例子。



文章来源: Loading jQuery, Underscore and Backbone using RequireJS 2.0.1 and shim