RequireJS——总是加载依赖库

RequireJS--always load dependency with library

本文关键字:依赖 加载 RequireJS      更新时间:2023-09-26

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

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

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

在他的TodoMVC示例中,Pyykkis只是在入口点要求它,这似乎使它始终可用。然而,这对我来说就像一个黑客。

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

在使用requireJS的项目中不应该有任何全局变量,这是使用requireJS的动机之一,这是为了避免污染全局命名空间…仅仅通过在入口点使用require加载任何模块并不能使其成为全局的。查看这个链接,这可能对requireJS中的全局变量有帮助

在你的入口点main.js文件中配置需求

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时,你可以直接访问backbone上的方法。EventStreams对象

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

要简单加载Backbone,你需要这样做:

require.config({
    paths: {
        backbone: libs / backbone,
        underscore: libs / underscore,
        jquery: libs / jquery
    },
    shim: {
        'backbone': {                
            deps: ['underscore', 'jquery'],
            exports: '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来指定你想要在应用中使用的模块的名称。

希望有所帮助