当我使用requirejs(v2.1.13)来包含log4javascript(v1.4.10)时,js变量 log4javascript 是未定义的,但是我在chrome网络控制台中看到log4javascript.js已成功加载。
这是我的requirejs配置:
requirejs.config({
'baseUrl': 'resources/js',
'paths': {
'angular': 'libs/angularjs/angular',
'jquery' : 'libs/jquery/jquery-2.1.1.min',
'bootstrap' : 'libs/bootstrap/bootstrap',
'log4javascript': 'libs/log4javascript/log4javascript_uncompressed'
},
'shim' : {
'angular' : {'exports' : 'angular', deps: ['jquery']},
'jquery': {'exports' : 'jquery'},
'bootstrap': {'exports' : 'bootstrap', deps: ['jquery']}
}});
正弦1.4.10 log4javascript应该支持AMD所以我不需要添加垫片。
我无法理解我做错了什么。请帮忙!
UPD:版本1.4.10中的AMD支持似乎有问题,因为当我在" log4javascript_uncompressed.js"中注释掉以下行时并添加了垫片,一切都变得很好了:/*
if (typeof define == "function" && define.amd) {
// AMD. Register as an anonymous module.
define(factory);
} else if (typeof module != "undefined" && typeof exports == "object") {
// Node/CommonJS style
module.exports = factory();
} else {
// No AMD or CommonJS support so we place log4javascript in (probably) the global variable
*/
root.log4javascript = factory();
//}
答案 0 :(得分:3)
当我使用requirejs(v2.1.13)包含log4javascript(v1.4.10)时,js变量log4javascript未定义但是我在chrome网络控制台中看到log4javascript.js已成功加载。
如果一切正常,那将会发生什么。看看你注释掉的代码。当log4javascript检测到AMD加载程序时,它不会将名为log4javascript
的变量泄漏到全局空间。只有当它没有检测到AMD加载程序或者它在Node中运行时,它才会泄漏该变量。
如果使用log4javascript的代码全部在AMD模块中,那么访问log4javascript的正确方法是将其作为define
或require
调用中的依赖项包含在内。例如,require(['foo', 'log4javascript'], function (foo, log4javascript) {...});
如果您必须处理期望全局空间中存在log4javascript
变量的代码,则可以通过故意泄漏变量来解决它。有关如何操作的详细信息,请参阅this answer。