我的应用程序中有几个不同的应用程序。由于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和保姆应该使用?
还有其他好方法吗?
感谢!
答案 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
,则应用程序中的任何位置都会加载模块underscore
或backbone
。 underscore
建立了此规则的例外情况。当map
需要backbone.babysitter
时,会加载backbone
。如果需要backbone-1.1.2
,则会加载underscore
。类似地图中的其他模块。