RequireJS multipleversion依赖

时间:2016-02-10 15:07:59

标签: requirejs dependencies

我的应用程序中有几个不同的应用程序。由于Marionette使用Backbone而且使用了Underscore,因此一些较新的Backbone和较旧的Marionette。

现在我要更新Underscore,1.6.0 - > 1.8.3。

所以我在require.config中创建了一个遗留下划线

paths: {
    'underscore': 'vendor/underscore/underscore',
    'underscore-1.6.0': 'vendor/underscore-1.6.0/underscore',
    'backbone': 'vendor/backbone/backbone',
    'backbone-1.1.2': 'vendor/backbone-1.1.2/backbone',
    'marionette': 'vendor/marionette/lib/core/amd/backbone.marionette',
    'backbone.wreqr': 'vendor/backbone.wreqr/lib/backbone.wreqr',
    'backbone.babysitter': 'vendor/backbone.babysitter/lib/backbone.babysitter',

},
shim: {
    'underscore-1.6.0': {
        exports: 'underscore'
    },
    'backbone-1.1.2': {
        deps: ['underscore-1.6.0'],
        exports: 'backbone'
    },
    'backbone.babysitter': {
        deps: ['backbone-1.1.2', 'underscore-1.6.0']
    },
    'backbone.wreqr': {
        deps: ['backbone-1.1.2', 'underscore-1.6.0']
    },
    'marionette': {
        deps: ['backbone-1.1.2']
    }
},

Marionette依赖于Wreqr和Babysitter,后者依赖于下划线1.6.0(和Backbone 1.1.2)。我的解决方案是为它们添加deps。

我的问题是当我试图要求时('牵线木偶');因为wreqr和保姆都要求强调'和'骨干'他们正在获得非传统的不是'下划线 - 1.6.0'和' backbone-1.1.2'。

我可以决定哪个版本的下划线和骨干"骨干"和#34;下划线" Wreqr和保姆应该使用?

还有其他好方法吗?

感谢!

  • 约翰

1 个答案:

答案 0 :(得分:0)

您提到的所有软件包都是正确的AMD模块。对于没有版本号的每个包,我检查了最新版本的源。对于版本化名称,我检查了名称中的特定版本。在所有情况下,他们会检查是否存在PYTHONPATH并致电define.amd。因此,它们是适当的AMD模块。因此,您无法使用define shim配置仅适用于非真正AMD模块的模块(不要调用shim)。

现在,问题是需要Backbone的软件包需要define而需要Underscore的软件包需要backbone。它们不按版本区分。您可以使用Little Bobby Tables attacks

强制他们使用特定版本
underscore

如果需要map: { 'backbone-1.1.2': { underscore: 'underscore-1.6.0' }, 'backbone.babysitter': { backbone: 'backbone-1.1.2', underscore: 'underscore-1.6.0' }, 'backbone.wreqr': { backbone: 'backbone-1.1.2', underscore: 'underscore-1.6.0' }, marionette: { backbone: 'backbone-1.1.2' } } backbone,则应用程序中的任何位置都会加载模块underscorebackboneunderscore建立了此规则的例外情况。当map需要backbone.babysitter时,会加载backbone。如果需要backbone-1.1.2,则会加载underscore。类似地图中的其他模块。