我在这里遇到困难,我正在尝试在加载任何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下工作吗?
答案 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中控制台输出的屏幕截图: