Когда модуль загружен, он кэшируется. Таким образом, когда кто-то еще загружает его снова, новый код не запускается. Предыдущий экспорт только что вернулся.
Это работает, но я подумал, есть ли более чистый способ экспорта новых экземпляров? Или единственный способ экспортировать ту функцию, которую я должен вызвать в B, чтобы получить мой новый экземпляр?
Если вы хотите каждый раз новый экземпляр, вам нужно экспортировать функцию, которую вы можете вызвать, чтобы получить новый экземпляр. Другого пути нет, так как загрузка ранее загруженного модуля не запускает никакого дополнительного кода - он просто возвращает предыдущий кэшированный экспорт.
Вы можете экспортировать фабричную функцию (как в вашем примере):
export const myFactory = function() {
return { user: 'asd', asd: 'b' };
}
Или вы можете экспортировать функцию конструктора (которую вызывающий будет вызывать с помощью new
, чтобы получить новый объект).
export class myObj {
constructor() {
this.user = 'asd';
this.asd = 'b';
}
checkUser() {
// some code here that operates on instance data
}
}
Либо заводская функция, либо функция конструктора будет работать нормально. Если методов нет и вы просто хотите простой объект, то функция фабрики проще. Если есть методы, то класс, вероятно, имеет больше смысла.