我偶尔会在Sentry中收到一个奇怪的错误消息,即我们的自定义jQuery验证器方法之一未定义。但是,这应该是不可能的-我们正在使用webpack捆绑脚本,并且自定义方法与jQuery和验证器捆绑在同一捆绑中。
这是一个非常罕见的错误,触发它的设备中有75%是iPad。我想忽略它,但它一直困扰着我。这怎么可能发生?
这是细节...
result = $.validator.methods[ method ].call( this, val, element, rule.parameters );
Webpack正在为我们创建两个包,一个是主包,另一个是子包:
webpack.config.js:
module.exports = {
entry: {
"main": [ "./dev/config/main.js" ],
"sub": [ "./dev/config/sub.js" ]
....
main.js(相关部分):
require('jquery');
require("../source/jQueryPlugins/Validator/1.17.0");
require("../source/jquery.validate.1.17.0.CustomMethods");
其他所有内容都很标准,sub.js负责设置验证器和所有规则等。这些脚本(main.js和sub.js)包含在页面底部,如下所示:>
<script type="text/javascript" src="/includes/bundles/dist/main.js"></script>
<script type="text/javascript" src="/includes/bundles/dist/sub.js"></script>
此外,sub.js具有最后一个故障保护功能。在执行任何操作之前,它会检查是否已定义jQuery。因此,由于jQuery,验证器和我们的自定义验证器方法都在main.js中定义-这应该意味着,如果定义了jQuery,则将定义验证器和验证器的自定义方法。
(function() {
var jQueryLoading = setInterval(function() {
if (typeof($) === "function") {
clearInterval(jQueryLoading);
$(document).ready(function(){
// do stuff
});
}
}, 100);
})();
谁能看到我是否想念东西?