Я иногда получал странную ошибку, сообщаемую в Sentry, что один из наших пользовательских методов проверки jQuery не определен.Однако это должно быть невозможным - мы используем веб-пакет для объединения наших скриптов, а пользовательские методы объединяются в один пакет с jQuery и валидатором.
Это очень редкоошибка, и 75% устройств, которые запускают это iPad.Я хотел бы проигнорировать это, но это продолжает беспокоить меня.Как это может произойти?
Вот особенности ...
- Пользовательский метод называется "NoPOBoxes"
- Конкретная ошибка, сообщаемая Sentry:«Невозможно прочитать свойство 'call' из неопределенного. Возникла исключительная ситуация при проверке элемента BillAddress2, проверьте метод 'NoPOBoxes'."
- Строка, которая вызывает ошибку:
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);
})();
Кто-нибудь может увидеть, что я что-то упустил?