Javascript 仅在生产中出错
Javascript error in production only
我无法识别仅在生产中发生的 javascript 错误。错误是:
Uncaught TypeError: (intermediate value)(...) is not a function
文件中第 22182 行的 link:https://d2wvl99qs6f2ce.cloudfront.net/js/358ee32eac3992e61f9fa13a0c55203d.js
单击 link,Chrome 调试器在以下行显示错误:
(function(jQuery){
以上是一些例外情况:
/*
* jQuery SelectBox Styler v1.0.1
* http://dimox.name/styling-select-boxes-using-jquery-css/
*
* Copyright 2012 Dimox (http://dimox.name/)
* Released under the MIT license.
*
* Date: 2012.10.07
*
*/
(function($) {
$.fn.selectbox = function(options) {
...
}
})(jQuery)
/* jquery.nicescroll
-- version 3.5.0 BETA5
-- copyright 2011-12-13 InuYaksa*2013
-- licensed under the MIT
--
-- http://areaaperta.com/nicescroll
-- https://github.com/inuyaksa/jquery.nicescroll
--
*/
(function(jQuery){
...
})( jQuery );
查看代码和错误,看来我应该更改行:
})(jQuery)
到
})(jQuery);
此更改与我的研究一致,即此错误通常是由缺少分号引起的。但是,在检查我的开发环境中使用的代码时,相同的代码(没有分号)没有产生任何错误。我试过在错误之前设置断点,这样我就可以暂停执行,添加分号,然后继续执行,但这并没有提供太多信息(也许我使用的调试工具不正确...)
我很挣扎因为:
我的开发环境和生产环境的代码是一样的(通过github对比查看)
我无法在我的开发环境中复制错误,这限制了我的调试能力。
文件 https://d2wvl99qs6f2ce.cloudfront.net/js/358ee32eac3992e61f9fa13a0c55203d.js 是我应用程序头部的 js 文件的汇编。但是,为什么 Chrome 从云端提供服务?
我可以通过哪些方法开始确定问题的根源?有没有一种方法可以修改 Chrome 开发人员工具或 Firefox 的 Firebug 中的代码以添加分号并继续执行?我什至试过将 javascript 粘贴到 JSfiddle 中,但那破坏了 fiddle(文件太长无法粘贴)。如果有任何不同,我正在构建一个 Magento 1.9 应用程序...
原来答案与 Magento 有关。在 Magento 的后台管理中,有一个合并所有 javascript 错误的选项(管理 -> 系统 -> 配置 -> 在高级选项卡下,点击开发人员 -> Javascript 设置 -> 合并 Javascript 个文件)。合并 Javascript 个文件时,所有 javascript 个通常被忽略的错误(例如某些地方缺少分号)在合并触发错误之前。在我的例子中,javascript 文件在生产环境中被合并(出于性能原因),但在开发环境中没有。
在我的例子中,生产环境正在合并 javascript 文件,而开发环境则没有。由于我在上面的文件中注意到缺少分号(参见问题),因此生产代码失败,而开发代码有效。
我无法识别仅在生产中发生的 javascript 错误。错误是:
Uncaught TypeError: (intermediate value)(...) is not a function
文件中第 22182 行的 link:https://d2wvl99qs6f2ce.cloudfront.net/js/358ee32eac3992e61f9fa13a0c55203d.js
单击 link,Chrome 调试器在以下行显示错误:
(function(jQuery){
以上是一些例外情况:
/*
* jQuery SelectBox Styler v1.0.1
* http://dimox.name/styling-select-boxes-using-jquery-css/
*
* Copyright 2012 Dimox (http://dimox.name/)
* Released under the MIT license.
*
* Date: 2012.10.07
*
*/
(function($) {
$.fn.selectbox = function(options) {
...
}
})(jQuery)
/* jquery.nicescroll
-- version 3.5.0 BETA5
-- copyright 2011-12-13 InuYaksa*2013
-- licensed under the MIT
--
-- http://areaaperta.com/nicescroll
-- https://github.com/inuyaksa/jquery.nicescroll
--
*/
(function(jQuery){
...
})( jQuery );
查看代码和错误,看来我应该更改行:
})(jQuery)
到
})(jQuery);
此更改与我的研究一致,即此错误通常是由缺少分号引起的。但是,在检查我的开发环境中使用的代码时,相同的代码(没有分号)没有产生任何错误。我试过在错误之前设置断点,这样我就可以暂停执行,添加分号,然后继续执行,但这并没有提供太多信息(也许我使用的调试工具不正确...)
我很挣扎因为:
我的开发环境和生产环境的代码是一样的(通过github对比查看)
我无法在我的开发环境中复制错误,这限制了我的调试能力。
文件 https://d2wvl99qs6f2ce.cloudfront.net/js/358ee32eac3992e61f9fa13a0c55203d.js 是我应用程序头部的 js 文件的汇编。但是,为什么 Chrome 从云端提供服务?
我可以通过哪些方法开始确定问题的根源?有没有一种方法可以修改 Chrome 开发人员工具或 Firefox 的 Firebug 中的代码以添加分号并继续执行?我什至试过将 javascript 粘贴到 JSfiddle 中,但那破坏了 fiddle(文件太长无法粘贴)。如果有任何不同,我正在构建一个 Magento 1.9 应用程序...
原来答案与 Magento 有关。在 Magento 的后台管理中,有一个合并所有 javascript 错误的选项(管理 -> 系统 -> 配置 -> 在高级选项卡下,点击开发人员 -> Javascript 设置 -> 合并 Javascript 个文件)。合并 Javascript 个文件时,所有 javascript 个通常被忽略的错误(例如某些地方缺少分号)在合并触发错误之前。在我的例子中,javascript 文件在生产环境中被合并(出于性能原因),但在开发环境中没有。
在我的例子中,生产环境正在合并 javascript 文件,而开发环境则没有。由于我在上面的文件中注意到缺少分号(参见问题),因此生产代码失败,而开发代码有效。