RequireJS shim问题与IE8及更少

时间:2014-02-21 12:19:41

标签: javascript backbone.js internet-explorer-8 requirejs amd

我在这里遇到困难,我正在尝试在加载任何AMD模块之前加载非AMD模块jquery / lodash / underscore。我知道我应该使用'shim'而且我会这样做。除了IE8以外,Evertyghing似乎适用于所有浏览器。 IE7 / 8有哪些解决方法?

我看了'use'插件/'order'插件并将全局变量包装到AMD模块(http://tbranyen.com/post/amdrequirejs-shim-plugin-for-loading-incompatible-javascript)中。一切都失败了。有关应如何做的任何想法?

修改

require.config({
use: {
    backbone: {
        deps: ["underscore", "jquery"],
        attach: "Backbone"
    },

    underscore: {
        attach: "_"
    },

    jquery : {
        attach: 'jquery'
    }
},
paths: {
    'underscore': 'lodash-1.3.1.min',
    'backbone': 'backbone-1.0.0.min',
    'jquery': 'jquery-1.10.2.min',
}
});

require([
'use',
'jquery',
'underscore',
'backbone',
'app',
], function($) {
'use strict';
});

'use'是use.js插件。我以前也用过'shim'。

编辑2

shim: {
    'app': {
        deps: ['backbone']
    },
    'backbone': {
        deps: ['underscore', 'jquery'],
        exports: 'Backbone'
    },
    'underscore': {
        exports: '_'
    },
    'jquery' : {
        exports: 'jquery'
    },
},

我的垫片配置。要求版本是2.1.10。

编辑3:

require.config({
paths: {
    'underscore': '//cdn.vgc.no/js/libs/lodash/lodash-1.3.1.min',
    'backbone': '//cdn.vgc.no/js/libs/backbone/backbone-1.0.0.min',
    'jquery': '//cdn.vgc.no/js/libs/jquery/jquery-1.10.2.min'
},
enforceDefine : true
});

require([
'jquery',
'underscore',
'backbone'
], function($, _, Backbone) {
'use strict';

console.log($);
console.log(_);
console.log(Backbone);
})

这应该在IE8下工作吗?

1 个答案:

答案 0 :(得分:3)

jquery的垫片是多余的。

此外,如果app是一个实际的RequireJS模块,则不需要填充垫片。对define的{​​{1}}电话应为app

Asgoth指出lodash和Backbone符合AMD标准,因此您不应该使用define(['backbone'], function (Backbone) {...underscore的垫片。您将lodash用于Backbone。 Lodash在一段时间内(可能永远)不需要垫片。 underscore曾经需要一个垫片,但它现在支持AMD式装载机。

所以目前,配置中没有任何垫片似乎是必要的。您仍应使用Backbone

如果这是混淆的原因,让我澄清一下使用填充程序的基本规则是:如果模块使用enforceDefine来定义自己,那么它必须没有垫片;如果某个模块没有使用define,那么它必须有一个垫片。讨论使用define并确保所有填充程序都设置为enforceDefine的文档不会更改此规则。它的含义是如果需要垫片(根据上面的规则),那么这个垫片应该有一个exports字段。

编辑:我可以使用以下代码在IE8中加载它。尽管我之前的评论,你会看到Backbone的垫片。为什么?因为您使用的是Backbone 1.0.0,它没有AMD支持。最新版本Backbone 1.1.2支持AMD。因此,如果您要升级到此版本,则不需要垫片。 (此代码使用exports作为CDN路径的前缀,但我不认为这是您问题的一个因素。只是我首先从本地文件系统加载测试HTML并执行此操作,http:前缀是必需的。)

http:

以下是IE8中控制台输出的屏幕截图:

Screenshot in SauceLab