Ответ 1
Когда вы импортируете модуль через Node (и, соответственно, через Webpack, поскольку он фактически следует тем же правилам, что и при разрешении модуля), код в файле выполняется один раз, затем результирующий экспорт кэшируется. Это означает, что в обоих ваших файлах React
будет ссылкой на один и тот же объект. Таким образом, ваше предположение верно: Webpack действительно достаточно умен, чтобы не выполнять React файл с полным исходным кодом каждый раз, когда вы импортируете его.
Вы можете легко проверить это сами - добавьте console.log()
к модулю, который импортирован в несколько мест в вашем приложении (убедитесь, что он не входит в функцию или что-либо еще, что может отложить его выполнение). Вы увидите, что журнал создается только один раз, а не один раз за импорт!
Обновление: Также стоит отметить, что спецификация для модулей ES2015 фактически перечисляет это как требование для любой реализации:
Эта операция должна быть идемпотентной, если она завершается нормально. Каждый раз, когда он вызывается с определенной парой
referencingModule, specifier
в качестве аргументов, он должен возвращать один и тот же экземпляр модульной записи.