Операторы импорта JavaScript, выполняющие код

Я пытаюсь диагностировать проблему, которая недавно возникла у нас после обновления нашего поддерживаемого браузера (~40 -> ~60)

У нас есть этот эффективный код во внешней (теперь не поддерживаемой) библиотеке, которая находится в iffe:

(function(window, undefined){
    # external library
    if(!window.terribleIdea){
        window.terribleIdea = {}
    }
    <some code>
    if(!window.terribleIdea.config.url){
        window.terribleIdea.config.url = 'the wrong url'
    }

    localStorage.set('somethingImportant', getStuff(window.terribleIdea.config.url))
})( window );

Теперь у нас был файл типа начальной загрузки, который выглядел так:

# appBootstrapper.js
import applyConfig from './app/configApplier';
import ALL_ANGULAR_MODULES from './app'; # contains angular.module set up for 
                                         # app and every dependency

fetchConfig()
    .then(applyConfig)
    .then () => angular.bootstrap(document, [ALL_ANGULAR_MODULES])
    .catch( error => {
        alert(`It borked:  ${error.message}`)
    });

Среди прочего applyConfig делает:

window.terribleIdea = {
    config: {
        url: 'not terrible'
    }
}

Что теперь происходит, так это то, что оператор импорта ALL_ANGULAR_MODULES заканчивает выполнение кода во внешней библиотеке и настройку локального хранилища. То, что, как мы думаем, раньше происходило, это то, что angular.bootstrap Бег.

Теперь мне нужно выяснить, изменилась ли функциональность оператора import в более поздней версии Chrome или он всегда выполнял этот код и оставался незамеченным?

Все, что я могу найти, это ссылки на динамический импорт и порядок выполнения сценариев, в <script></script> теги.

1 ответ

Решение

Трудно отлаживать без доступа к проекту (см. Обсуждение в комментариях выше). Вот некоторые возможности, которые стоит изучить, сталкиваясь с такими проблемами. Конечно, возможно, что так было все время.

  • Измените конфигурацию пакета. Webpack принимает entries как массивы, и порядок имеет значение в них.
  • Изменение способа, которым менеджер пакетов / зависимостей реагирует на динамический imports
  • Измените способ, которым ваше приложение загружает свою зависимость во время его bootstrap фаза. Это не (imo) специфично для углов, так как многие приложения используют своего рода "компонентность", которая переводит файлы, выполненные в другом порядке, в котором они импортируются (так как они могут экспортировать только конструкторы или еще что-то).
Другие вопросы по тегам