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

时间:2016-09-26 13:40:34

标签: javascript openlayers-3 google-closure-compiler

我有一个网站,它使用不同的javascript插件,并运行一堆js文件(~30)。我想尝试将这些js文件分组到一个文件中,并尝试使用 Google的Closure Compiler 对其进行基本缩小(仅删除空格)。

我已经介绍了所有js文件,其顺序与我们页面中包含的Closure Compilers在线版本相同,并运行编译。编译的参数如下所示:

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level WHITESPACE_ONLY
// .... bunch of javascript files here
// ==/ClosureCompiler==

编译成功运行,既没有警告也没有错误。然后我获取结果文件,将其复制到我的服务器,并尝试将其包含在我的页面中。

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

TypeError: event.feature.values_ is undefined

我试图获取发生此错误的空间,代码看起来像这样:

this.vectorLayer.getSource().on("addfeature",function(event){if(typeof event.feature.values_.type=="undefined")return;

这是我自己的javascript代码正在做的事情,但是这部分代码甚至不应该在页面加载时运行。当我使用单独的javascript文件时,页面加载非常大,没有任何错误,但删除了空格,并且文件合并,则会出现此错误。

使用基本逻辑,我通过将.js文件按照它们包含在我的页面中的相同顺序加在一起,并且只删除空格以获得较小的文件大小,我应该这样做。 t导致任何错误,因为浏览器无论如何都会同步加载js文件。我在这方面错了吗?如果没有,这个错误的可能原因是什么?

编辑1:

好的,所以我将问题缩小到单个.js文件,即OpenLayers的javascript文件。如果我不编译该文件,并将其分开包含,一切正常。什么可能导致这个奇怪的问题?

1 个答案:

答案 0 :(得分:1)

事实证明,这是由Google方面的一种奇怪的缓存机制引起的。重新启动 Closure Compiler ,再次重新引入所有js文件,然后重新编译它,解决了我的问题。

感谢评论小伙伴们!