gpt4 book ai didi

javascript - IE8 及更低版本的 RequireJS shim 问题

转载 作者:行者123 更新时间:2023-11-30 12:47:53 28 4
gpt4 key购买 nike

我在这里遇到了困难,我试图在加载任何 AMD 模块之前加载非 AMD 模块 jquery/lodash/underscore。我知道我应该使用“垫片”,我确实这样做了。 Evertyghing 似乎适用于除 IE8 及更低版本之外的所有浏览器。 IE7/8 是否有某种解决方法?

我看过“使用”插件/“订购”插件并将全局变量包装到 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 插件。我以前也用过“垫片”。

编辑 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 下工作吗?

最佳答案

jquery 的 shim 是多余的。

另外,如果 app 是一个实际的 RequireJS 模块,你不需要它的 shim。 appdefine 调用应该是 define(['backbone'], function (Backbone) {...

Asgoth 指出 lodash 和 Backbone 是 AMD 兼容的,因此您不应该为 underscoreBackbone 使用 shim。您将 lodash 用于 underscore。 Lodash 有一段时间(也许永远)不需要 shim。 Backbone 过去需要垫片,但现在支持 AMD 风格的加载器。

所以目前,您的配置中的垫片似乎都不是必需的。您仍然应该使用 enforceDefine

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

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

  require.config({
paths: {
'underscore': 'http://cdn.vgc.no/js/libs/lodash/lodash-1.3.1.min',
'backbone': 'http://cdn.vgc.no/js/libs/backbone/backbone-1.0.0.min',
'jquery': 'http://cdn.vgc.no/js/libs/jquery/jquery-1.10.2.min'
},
shim: {
backbone: {
deps: ["jquery", "underscore"],
exports: "Backbone"
}
},
enforceDefine : true
});

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

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

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

Screenshot in SauceLab

关于javascript - IE8 及更低版本的 RequireJS shim 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21934353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com