Операторы импорта JavaScript, выполняющие код - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь диагностировать проблему, которая недавно возникла у нас после обновления нашего поддерживаемого браузера (~ 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 Ответ

0 голосов
/ 17 сентября 2018

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

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