【问题标题】:Dependencies in RequireJS with Backbone, Underscore, and jQuery in 20142014 年 RequireJS 与 Backbone、Underscore 和 jQuery 的依赖关系
【发布时间】:2014-06-20 04:13:55
【问题描述】:

我看到很多关于使用带有 Backbone、Underscore 和 jQuery 的 RequireJS 的问题。我的问题略有不同;我的应用程序有效,但我不知道为什么。

目前,Underscore、jQuery 和 Backbone 都导出 AMD 模块,所以我不再需要填充它们并导出它们的变量。因此,我的main.js 看起来像下面的代码 sn-p。

ma​​in.js

require.config({
    paths: {
        jquery: 'lib/jquery/jquery-1.10.2',
        'jquery-ui': 'lib/jquery/jquery-ui-1.10.4.min',
        underscore: 'lib/underscore/underscore.min',
        backbone: 'lib/backbone/backbone.min',
        'backbone.localStorage': 'lib/backbone/backbone.localStorage'
    }
});

require(['jquery', 'jquery-ui', 'underscore', 'backbone', 'backbone.localStorage'], function() {

});

require.html

<!DOCTYPE html>
<html>
    <head>
        <title>My Sample Project</title>
        <!-- data-main attribute tells require.js to load
             scripts/main.js after require.js loads. -->
    </head>
    <body>
        <h1>My Sample Project</h1>
        <div id="test"> </div>
        <script type="text/javascript" data-main="js/main" src="js/lib/require/require.js"></script>
        <script type="text/javascript">

        </script>
    </body>
</html>

当我转到require.html 时,我可以转到控制台,我的所有变量都已正确加载。例如,var x = Backbone.Model.extend({}); var y = new x; 工作得很好。然而,Backbone 依赖于 Underscore 和 jQuery。 RequireJS 是使用这些库提供的模块自动解决这些依赖关系,还是只是侥幸?

【问题讨论】:

  • define 它们的依赖项本身。查看 Backbone 或 jQuery 的(未压缩)代码并搜索 define(,这应该会让您找到正确的行。

标签: javascript jquery backbone.js requirejs underscore.js


【解决方案1】:

在 requirejs 配置设置后,您有 require

require(['jquery', 'jquery-ui', 'underscore', 'backbone', 'backbone.localStorage'], function() {

});

它们以正确的顺序加载偶然,以控制您需要定义每个模块的依赖关系在垫片中的顺序

【讨论】:

  • 我知道我的模块需要它们;我在问它们是否偶然以正确的顺序加载,或者 RequireJS 是否以正确的方式组织它们。
  • 错了。每个模块(库)的工厂方法将在您的回调执行之前设置适当的全局。如果全局值更改或消失,最好在您的回调(或您自己的模块的工厂方法)中使用每个 AMD 兼容库的返回值。在满足其依赖关系之前,不会满足其中的每一个。
  • 怎么了?问题是如果没有控制依赖关系的 shim 下载顺序,所有这些都发生在调用实际模块回调之前。
【解决方案2】:

Require 对这类工作有很大帮助。

您可以像这样使用 'shim' 命令以简单而正确的方式指定依赖项。

//Coffeescript example
paths:
    backbone : 'path/backbone'
    underscore : 'path/underscore'
    jquery: 'path/jquery'


 shim:
    backbone:
        deps:['underscore','jquery']
        exports: 'Backbone'

这样你定义了当一个名为'Backbone'的模块被调用时,require将加载所有写在deps:[]中的依赖。 现在它永远不会在下划线之前加载主干。

我有一个博客和一篇关于它的帖子,不幸的是它只有葡萄牙语,但也许有帮助。

http://www.rcarvalhojs.com/backbone/2014/06/03/comecando-require-backbone.html

【讨论】:

  • Chrome 为我翻译了它,它有点帮助。我知道我们可以指定依赖项,但我要问的是我没有指定我的依赖项并且我的应用程序仍然可以工作,所以我问的是它们都以正确的顺序加载是否很神奇,或者因为它们是AMD,RequireJS 负责加载顺序?
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
相关资源
最近更新 更多