我正在尝试加载 KnockoutFire,这是一个使用 RequireJS 的 KnockoutJS 插件。它只有 1 个文件:https ://github.com/hiroshi/knockoutFire/blob/master/knockoutFire.js
该插件做了两件事:
- 定义全局变量“KnockoutFire”
- 扩展核心 KnockoutJS ("ko") 库
因此,要正确加载此库,它需要能够通过全局变量“ko”访问 KnockoutJS。问题是我正在使用适当的 AMD 加载 KnockoutJS,并且没有可供 KnockoutFire 参考的全局“ko”。我曾尝试同时填充库和其他各种技巧以使其正常工作,但我很难过。一切都会产生错误:
ReferenceError: ko is not defined
这是我正在使用的内容:
require.config({
enforceDefine: false,
baseUrl: 'assets/js/',
paths: {
'knockout': '//ajax.aspnetcdn.com/ajax/knockout/knockout-2.2.1'
},
shim: {
'knockout': { exports: 'ko' },
'knockoutfire': { exports: 'KnockoutFire', deps: ['knockout'] }
},
waitSeconds : 15
});
require(['knockoutfire'], function() {
log(KnockoutFire);
});
我也尝试过做一些奇怪的事情,比如:
require(['knockout'], function(ko) {
require(['knockoutfire'], function(kofire, ko) {
log(KnockoutFire);
});
});
或者:
define(['knockout'], function(ko) {
require(['knockoutfire'], function(ko) {
log(KnockoutFire);
});
});
如果我下载第三方库并将其添加到其中:
define(['knockout'], function(ko) {
<!--- third party lib --->
});
一切正常。
有没有办法在不修改第三方库的情况下达到相同的结果?