使用 CDN 的 Knockout 和 jquery-ui\sortable Requirejs 配置

Knockout and jquery-ui\sortable Requirejs Configuration using CDN

我正在尝试使用 requirejs 加载我们的许多 JS 依赖项。我们遇到了 KnockoutSortable 对 jquery-ui\sortable 的依赖性问题。

我无法从 jquery-ui 的 cdn 下载中获得 sortable.js 它通过从我站点内的副本下载来满足它的依赖性。我试过垫片

'knockoutSortable' : {
    deps: ['jqueryUi']
},

但这并没有强制 Knockout 使用 jquery-ui

的 CDN 下载版本

我们的配置如下:

var require = {
baseUrl: '/Scripts',
paths: {
    jquery: ['//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min', 'lib/jquery-1.9.1.min'],
    jqueryUi: ['//ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min', 'lib/jquery-ui-1.11.3.min'],        
    knockout: ['//cdnjs.cloudflare.com/ajax/libs/knockout/3.3.0/knockout-min','lib/knockout-3.3.0.min'],
    knockoutMapping: ['//cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min','lib/knockout.mapping-latest.min'],
    knockoutValidation: ['//cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.2/knockout.validation.min','lib/knockout.validation.min'],
    knockoutPostBox: ['//cdnjs.cloudflare.com/ajax/libs/knockout-postbox/0.5.1/knockout-postbox.min', 'lib/knockout-postbox.min'],
    knockoutSortable: ['//cdnjs.cloudflare.com/ajax/libs/knockout-sortable/0.11.0/knockout-sortable.min','lib/knockout-sortable.min'],
    ...
shim: {
    'jquery': {
        exports: '$'
    },
    'knockoutSortable' : {
    deps: ['jqueryUi']
},...

因为 jquery-ui 和 knockout 都与 AMD 兼容,所以你不能使用垫片配置,你需要使用映射配置来映射 jquery-ui 模块回到 jqueryUi 路径。

link

我们通过将此地图配置添加到 require.config

解决了这个问题
map : {
    '*': {
        'jquery-ui/core': 'jqueryUi',
        'jquery-ui/sortable': 'jqueryUi',
        'jquery-ui/draggable': 'jqueryUi',
        'jquery-ui/mouse': 'jqueryUi',
        'jquery-ui/widget': 'jqueryUi'
    }
}