Javascript 对js文件进行分组会返回一个奇怪的js错误

Javascript 对js文件进行分组会返回一个奇怪的js错误,javascript,openlayers-3,google-closure-compiler,Javascript,Openlayers 3,Google Closure Compiler,我有一个网站,它使用不同的javascript插件,还有一堆要运行的js文件(~30)。我想尝试将这些js文件分组到一个文件中,并尝试使用谷歌的闭包编译器对其进行基本的缩小(仅删除空白) 我已经将所有的js文件按照页面中包含的顺序介绍给Closure Compilers在线版本,并运行编译。编译的参数如下所示: // ==ClosureCompiler== // @output_file_name default.js // @compilation_level WHITESPACE_ONLY

我有一个网站,它使用不同的javascript插件,还有一堆要运行的js文件(~30)。我想尝试将这些js文件分组到一个文件中,并尝试使用谷歌的闭包编译器对其进行基本的缩小(仅删除空白)

我已经将所有的js文件按照页面中包含的顺序介绍给Closure Compilers在线版本,并运行编译。编译的参数如下所示:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level WHITESPACE_ONLY
// .... bunch of javascript files here
// ==/ClosureCompiler==
this.vectorLayer.getSource().on("addfeature",function(event){if(typeof event.feature.values_.type=="undefined")return;
编译成功运行,既没有警告也没有错误。然后我获取结果文件,将其复制到我的服务器,并尝试将其包含到我的页面中

页面运行,但是出现了一个奇怪的错误,它在操作的中间停止了我的JavaScript:

TypeError: event.feature.values_ is undefined
我试图获取发生此错误的空间,那里的代码如下所示:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level WHITESPACE_ONLY
// .... bunch of javascript files here
// ==/ClosureCompiler==
this.vectorLayer.getSource().on("addfeature",function(event){if(typeof event.feature.values_.type=="undefined")return;
这是我自己的javascript代码正在做的事情,但这部分代码甚至不应该在页面加载时运行。当我使用单独的javascript文件时,页面的加载非常大,没有任何错误,但是删除了空白,并且文件合并在一起,这个错误就会出现

根据基本逻辑,我认为通过按页面上包含的相同顺序添加
.js
文件,并且仅删除空格以获得较小的文件大小,不会导致任何错误,因为浏览器以任何方式同步加载js文件。在这方面我错了吗?如果不是,那么这个错误的可能原因是什么

编辑1:


好的,所以我把问题缩小到一个
.js
文件,即
OpenLayers
的javascript文件。如果我不编译该文件,并单独包含它,那么一切都可以正常工作。是什么导致了这个奇怪的问题?

事实证明,这是由谷歌方面一个奇怪的缓存机制造成的。重新启动闭包编译器,再次引入所有js文件,然后重新编译,解决了我的问题


谢谢大家的评论

即使删除文件中的空白也会破坏JavaScript。例如,如果它使用函数的
toString()
方法进行反射,则可以通过删除空白轻松打破反射。为什么依赖
event.feature.values
?为什么不使用API方法?@JonatasWalker,你能详细说明一下吗?什么API方法?这就是为什么我告诉你使用API方法而不是依赖内部对象。使用类似于
event.feature.getKeys()
event.feature.getProperties()
。我猜基于此讨论,您使用的不是相同的JS源文件-因为类似于您所列出的重命名不会发生在闭包编译器的
空格级别。手动测试时,您是否使用带有闭包编译器和原始文件的min.js文件?您应该接受自己的答案。这是在线版本的一个明确问题。可能会在上提交一个bug报告,尤其是因为你花了这么多时间来弄清楚一个测试用例