Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RequireJS——始终使用库加载依赖项_Javascript_Requirejs_Amd - Fatal编程技术网

Javascript RequireJS——始终使用库加载依赖项

Javascript RequireJS——始终使用库加载依赖项,javascript,requirejs,amd,Javascript,Requirejs,Amd,有一个主干插件,我想在我的整个代码库中使用,但我不想每次使用它时都需要它和主干一起使用。现在,我的脚本看起来像: define( ['backbone','backbone.eventstreams'], function(Backbone){ //... } ); Backbone.EventStreams只是扩展了Backbone,因此只要我包含Backbone,就可以自动使用该功能,而不必将其单独添加到每个文件中 Pykkis,在他的TodoMVC示例中,这似乎使它

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

define(
  ['backbone','backbone.eventstreams'], 
  function(Backbone){
    //...
  }
);
Backbone.EventStreams
只是扩展了
Backbone
,因此只要我包含Backbone,就可以自动使用该功能,而不必将其单独添加到每个文件中

Pykkis,在他的TodoMVC示例中,这似乎使它在整个过程中都可用。然而,这对我来说就像是一个黑客


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

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

在入口点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对象上的方法。因此,根据您所说的,这个插件依赖于主干。 主干网不支持AMD,所以您需要使用shim命令来加载它

要简单地加载主干网,您需要这样的东西

require.config({
    paths: {
        backbone: libs / backbone,
        underscore: libs / underscore,
        jquery: libs / jquery
    },
    shim: {
        'backbone': {                
            deps: ['underscore', 'jquery'],
            exports: 'Backbone'
        }
    });
现在要使用Backbone.EventStreams插件,正如您所说,这个插件依赖于主干,所以您需要这样的东西

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'
        }
    });
使用导出指定要在应用程序中用于该模块的名称


希望这能有所帮助

我明白在RequireJS项目中不应该有全局变量。我想让
主干网.EventStreams
作为
主干网的一部分免费加载,只要我需要
主干网
。更新问题以澄清。请参阅