RequireJS多版本依赖项

RequireJS多版本依赖项,requirejs,dependencies,Requirejs,Dependencies,我的应用程序中有几个不同的应用程序。一些较新的仅使用主干,而较旧的则使用木偶,因为木偶使用主干和下划线 现在我想更新下划线,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

我的应用程序中有几个不同的应用程序。一些较新的仅使用主干,而较旧的则使用木偶,因为木偶使用主干和下划线

现在我想更新下划线,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']
    }
},
木偶依赖于Wreqr和保姆,而保姆又依赖于下划线1.6.0(和主干线1.1.2)。我的解决方案是为它们添加DEP

我的问题是当我试图要求(木偶)时;由于wreqr和保姆都要求“下划线”和“主干”,他们得到的不是“下划线-1.6.0”和“主干-1.1.2”

我能告诉你,我该如何决定Wreqr和保姆应该使用哪个版本的下划线和主干线“主干线”和“下划线”吗

还有别的好办法吗

谢谢!

  • 约翰

您提到的所有软件包都是合适的AMD模块。对于每个没有版本号的包,我检查了最新版本的源代码。对于版本化名称,我在名称中检查了特定版本。在所有情况下,它们都会检查
define.amd是否存在,并调用
define
。因此,它们是合适的AMD模块。因此,您不能将
垫片
用于它们。
垫片
配置仅适用于并非真正AMD模块的模块(不要调用
定义

现在,问题是需要主干的包将需要
主干
,而需要下划线的包将需要
下划线
。它们不按版本区分。您可以使用以下命令强制他们使用特定版本:

在应用程序中的任何地方,如果需要
主干
下划线
,则加载模块
主干
下划线
map
建立了此规则的例外情况。当
backbone.babymatter
需要
backbone
时,将加载
backbone-1.1.2
。当它需要
下划线
时,将加载
下划线-1.6.0
。地图中的其他模块也是如此

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'
    }
}