JS / ES6: нужно ли повторно экспортировать модуль после установки на него атрибута? - PullRequest
0 голосов
/ 09 июня 2018

Насколько я понял из системы модулей, всякий раз, когда я import 'some_module' внутри файла, я всегда получаю один и тот же экземпляр этого модуля, а не другой экземпляр при каждом импорте.

Но если это правда, я как бы не понимаю этот шаблон, который я видел в некоторых приложениях:

// in a 'config_some_module.js' file
import SomeModule from 'some_module';

SomeModule.attribute = 'something';

export default SomeModule;

// in a different file;
import SomeModule from './config_some_module';

Если каждый раз, когда я импортирую модуль, я получаю один и тот же экземпляр (а не новый экземпляр), тогда зачем нужно реэкспортировать этот модуль для доступа к нему с конфигурацией, которая была сделана в предыдущем файле?

Кроме того, второй вопрос: если это НЕ нужно, какбыть уверенным, что во втором файле импорт получит модуль, когда это свойство уже установлено?Я предполагаю, что если оба импорта получат один и тот же экземпляр, то со временем свойство будет присутствовать в SomeModule во втором файле, но, возможно, шаблон, который я упомянул выше, будет полезен, потому что вы можете быть уверены, что изменения в модуле уже былиприложенное

1 Ответ

0 голосов
/ 09 июня 2018

Причина, по которой вам нужно export, заключается в том, что в противном случае config_some_module.js создаст только побочный эффект .Если вы хотите import от него напрямую, вам нужно export значение.Если вы не export что-то из config_some_module.js, вам нужно import модифицированный объект с побочным эффектом, выполнив это:

// in 'config_some_module.js' file
import SomeModule from 'some_module';

SomeModule.attribute = 'something';
// in a different file;
import './config_some_module'; // introduce side-effect
import SomeModule from 'some_module'; // access modified object

Одна "гуча"Следует иметь в виду, что побочный эффект будет происходить только один раз, независимо от того, сколько раз импортируется config_some_module.js.

Наконец, порядок, в котором вы выполняете операторы import в потребителе,не имеет значения, пока ваше использование происходит после обоих.

...