我在3天之后遇到了一个问题,谷歌关闭,因为依赖关系的顺序是错误的,我有这个:
main.js
(function () {
goog.provide('MYENGINE.Core');
goog.require('MYENGINE.engines.GraphicEngine');
goog.require('MYENGINE.engines.PhysicEngine');
goog.require('MYENGINE.engines.AudioEngine');
goog.require('MYENGINE.engines.GameEngine');
/*********************************
* @constructor
*
**********************************/
ENGINE.Core = function()
{
};
})();
这段代码(正确名称):
(function () {
goog.provide('MYENGINE.engines.GraphicEngine');
/*********************************
* @constructor
*
**********************************/
MYENGINE.engines.GraphicEngine = function()
{
};
})();
我不知道为什么,但是当我编写这个时,“MYENGINE.engines.GraphicEngine”首先出现在MYENGINE.Core之前。 所以,当我运行页面时,我遇到了错误:* 未捕获的ReferenceError:MYENGINE未定义*
我使用此代码来编译项目:
../extlib/closure/closure/bin/build/closurebuilder.py \
--root=../extlib/closure/ \
--root=../src \
--namespace="MYENGINE.Core" \
--output_mode=compiled \
--compiler_jar=compiler.jar \
> MYENGINE_min.js
在我的“MYENGINE_min.js”中,我可以在核心或初始命名空间(MYENGINE)之前找到GraphicEngine的创建,我忘记做某事了吗?
非常感谢你的帮助!
答案 0 :(得分:1)
Closure的设计使您无需将每个模块包装在匿名函数中。 如果删除匿名函数包装器,您的错误应该消失。例如, main.js 变为:
goog.provide('MYENGINE.Core');
goog.require('MYENGINE.engines.GraphicEngine');
goog.require('MYENGINE.engines.PhysicEngine');
goog.require('MYENGINE.engines.AudioEngine');
goog.require('MYENGINE.engines.GameEngine');
/**
* @constructor
*/
MYENGINE.Core = function()
{
};
您还问:
我不知道为什么,但是当我编译它时,“MYENGINE.engines.GraphicEngine”首先出现在MYENGINE.Core之前。
在MYENGINE.Core
行:
goog.require('MYENGINE.engines.GraphicEngine');
表示MYENGINE.Core
取决于MYENGINE.engines.GraphicEngine
。因此,MYENGINE.engines.GraphicEngine
必须首先显示,以便在从MYENGINE.Core
调用时定义它。例如,Closure的base.js
通常是Closure Builder生成的列表中的第一个源,因为所有其他Closure Library源依赖于base.js
来引导库。
如果您希望将已编译的JavaScript包装在匿名函数中以获得针对名称冲突的额外保险,Closure Compiler将提供以下标志:
--output_wrapper Interpolate output into this string at the place denoted by the marker token %output%.
使用Closure Builder,输出包装器将在命令行中指定,如下所示:
--compiler_flags="--output_wrapper=(function(){%output%})();"
此外,将Compiler警告级别设置为verbose将有助于在编译时捕获其他错误:
--compiler_flags="--warning_level=VERBOSE"
新的构建命令将是:
../extlib/closure/closure/bin/build/closurebuilder.py \ --root=../extlib/closure/ \ --root=../src \ --namespace="MYENGINE.Core" \ --output_mode=compiled \ --compiler_jar=compiler.jar \ --compiler_flags="--output_wrapper=(function(){%output%})();" \ --compiler_flags="--warning_level=VERBOSE" \ > MYENGINE_min.js
答案 1 :(得分:0)
你可以使用goog.scope
goog.scope(function(){
//code here
});