【问题标题】:RequireJS--always load dependency with libraryRequireJS--总是用库加载依赖
【发布时间】:2014-07-03 17:22:45
【问题描述】:

有一个 Backbone 插件,我想在我的整个代码库中使用它,但我不想每次我想使用它时都需要它和 Backbone 一起使用。现在,我的脚本看起来像:

define(
  ['backbone','backbone.eventstreams'], 
  function(Backbone){
    //...
  }
);

Backbone.EventStreams 只是扩展了Backbone,所以只要我包含 Backbone 就可以自动使用该功能,而不必将其单独添加到每个文件中。

Pyykkis,在他的 TodoMVC 示例中,simply requires it at the entry point 似乎使其始终可用。然而,这对我来说就像一个黑客。

这种方法有什么缺点吗?如果有,解决这个问题的正确方法是什么?

【问题讨论】:

标签: javascript requirejs amd


【解决方案1】:

在使用 requireJS 的项目中不应该有任何全局变量,这是使用 requireJS 背后的动机之一,即避免污染全局命名空间......只需在入口点使用 require 加载任何模块就不会它是全球性的..查看此链接,这可能会有所帮助global variables in requireJS

【讨论】:

  • 我知道RequireJS项目中不应该有全局变量。我想要的是将Backbone.EventStreams 作为Backbone 的一部分“免费”加载,每当我需要Backbone 时。更新了问题以澄清。
【解决方案2】:

在入口点 main.js 文件中配置 requirejs

require.config({
        paths: {
            backbone: libs / backbone,
            underscore: libs / underscore,
            jquery: libs / jquery
        },
        shim: {
            'backbone': {
                //These script dependencies should be loaded before loading
                //backbone.js
                deps: ['underscore', 'jquery'],
                //Once loaded, use the global 'Backbone' as the
                //module value.
                exports: 'Backbone.EventStreams'
            }
        });

无论何时定义或需要主干,您都可以直接访问 Backbone.EventStreams 对象上的方法

【讨论】:

    【解决方案3】:

    所以根据你所说的,这个插件依赖于 Backbone。 Backbone 不支持 AMD,所以需要使用 shim 命令来加载它。

    要简单地加载 Backbone,你需要这样的东西。

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

    现在要使用你所说的 Backbone.EventStreams 插件,这个插件依赖于 Backbone,所以你需要这样的东西。

    require.config({
        paths: {
            backbone: libs / backbone,
            underscore: libs / underscore,
            jquery: libs / jquery
            backboneEventStreams: libs / BackboneEventStreams (path to js file)
        },
        shim: {
            'backbone': {                
                deps: ['underscore', 'jquery'],
                exports: 'Backbone'
            },
            'BackboneEventStreams' :{
                 deps:['Backbone'], 
                 exports: 'BackboneEventStreams'
            }
        });
    

    使用 Exports 指定您希望在应用中用于该模块的名称。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-16
      相关资源
      最近更新 更多