Ошибка JS в производственном режиме Webpack, но не в режиме разработки - помогите найти причину - PullRequest
0 голосов
/ 28 декабря 2018

Я разработчик внешнего интерфейса (недавно выполнил переход с внутреннего бэк-разработчика на внешний веб-интерфейс), и я унаследовал нашу кодовую базу 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

Так что, если у кого-то есть какие-то подсказки, что может вызвать это несоответствие и где искать исправление такого поведения, это было бы замечательно!

...