Я разработчик внешнего интерфейса (недавно выполнил переход с внутреннего бэк-разработчика на внешний веб-интерфейс), и я унаследовал нашу кодовую базу Javascript от моего предшественника, и я пытаюсь поддерживать и оптимизировать ее.
У нас проблема в том, чтокод Javascript ведет себя по-разному в рабочей среде и в среде разработки.Есть ошибки, которые происходят только в производстве, и я не знаю, откуда возникает несоответствие в поведении.Наша цель - иметь одинаковое поведение и, что более важно, ошибки как в среде разработки, так и в производственной среде, поэтому, когда код запускается (производственная среда), мы можем быть уверены, что не будет никаких неожиданных ошибок.
Наш процесс сборкиработает с Webpack (webpack@4.17.1), также мы используем babel (@ babel / core @ 7.0.0) для переноса нашего кода Javascript.
Я провел небольшое исследование, чтобы выяснить, откуда взялись различия.Одна вещь, которую я придумал, была строгий режим , но, насколько я понимаю, строгий режим также используется в среде разработки, так что, вероятно, это не причина.
Здесьпростой пример такого поведения.У нас есть js-файл utilities.js, который представляет собой просто набор полезных методов:
/**
* @param {String} url
* @returns {Promise}
*/
export function loadScript(url) {
let loaded = this.getData('scriptsLoaded', []);
...
}
/**
* @param {String} key
* @param {*} [type={}]
* @returns {*}
*/
export function getData(key, type = {}) {
window.auskunft = window.auskunft || {};
return window.auskunft[key] = window.auskunft[key] || type;
}
Теперь loadScript () вызывается где-то еще, и потому что мы не в контексте класса (я думаю, это так)был реорганизован из класса в коллекцию независимых методов), getData () не может быть вызван с помощью this.
Это приводит к ошибке в производственной среде (которая затрагивает / останавливает остальную часть кода js), нов разработке эта ошибка не возникает и все работает нормально.Я ожидаю получить ошибку как в среде разработки, так и в производственной среде.
Это производственная ошибка:
utilities.js: 68 Uncaught (в обещании) TypeError: this.getDataне является функцией в Object.p (utilities.js: 68) в Function.value (client.js: 163) в t.value (app.js: 27) в main.js: 14
Так что, если у кого-то есть какие-то подсказки, что может вызвать это несоответствие и где искать исправление такого поведения, это было бы замечательно!