当我尝试使用 RequireJS 包含它时,log4javascript 未定义
log4javascript is undefined when I try to include it using RequireJS
当我使用 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']}
}});
Sine 1.4.10 log4javascript 应该支持 AMD 所以我不需要添加 shim。
我不明白我做错了什么。请帮忙!
UPD:1.4.10 版对 AMD 的支持似乎有问题,因为当我在 "log4javascript_uncompressed.js" 中注释掉以下行并添加 shim 时,一切都变得很好:
/*
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();
//}
When I use requirejs (v2.1.13) to include log4javascript (v1.4.10) js variable log4javascript is undefined however as I can see in chrome network console log4javascript.js is loaded successfully.
如果一切正常,这正是会发生的情况。查看您注释掉的代码。当 log4javascript 检测到 AMD 加载程序 时,它不会将名为 log4javascript
的变量泄漏到全局变量 space 中。仅当它既未检测到 AMD 加载程序也未检测到它在 Node.运行 中时,它才会泄漏该变量。
如果使用 log4javascript 的代码全部在 AMD 模块中,那么访问 log4javascript 的正确方法是将其作为依赖项包含在 define
或 require
调用中。例如,require(['foo', 'log4javascript'], function (foo, log4javascript) {...});
如果您必须使用期望 log4javascript
变量存在于全局 space 中的代码,您 可以 通过故意泄漏多变的。有关如何操作的详细信息,请参阅 this answer。
当我使用 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']}
}});
Sine 1.4.10 log4javascript 应该支持 AMD 所以我不需要添加 shim。
我不明白我做错了什么。请帮忙!
UPD:1.4.10 版对 AMD 的支持似乎有问题,因为当我在 "log4javascript_uncompressed.js" 中注释掉以下行并添加 shim 时,一切都变得很好:
/*
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();
//}
When I use requirejs (v2.1.13) to include log4javascript (v1.4.10) js variable log4javascript is undefined however as I can see in chrome network console log4javascript.js is loaded successfully.
如果一切正常,这正是会发生的情况。查看您注释掉的代码。当 log4javascript 检测到 AMD 加载程序 时,它不会将名为 log4javascript
的变量泄漏到全局变量 space 中。仅当它既未检测到 AMD 加载程序也未检测到它在 Node.运行 中时,它才会泄漏该变量。
如果使用 log4javascript 的代码全部在 AMD 模块中,那么访问 log4javascript 的正确方法是将其作为依赖项包含在 define
或 require
调用中。例如,require(['foo', 'log4javascript'], function (foo, log4javascript) {...});
如果您必须使用期望 log4javascript
变量存在于全局 space 中的代码,您 可以 通过故意泄漏多变的。有关如何操作的详细信息,请参阅 this answer。