Синглтон-классы часто можно считать антипаттернами, они, безусловно, являются антипаттернами в модульной среде. Модули, естественно, предоставляют синглтоны в Node.js, потому что они оцениваются только один раз при нормальных обстоятельствах.
Проблема с исходным кодом заключается в том, что global.foo = "bbb"
в main.js оценивается после console.log(global.foo)
в part1.js, поэтому существует условие гонки.
Это может быть:
global.js
export default { foo: 'a' };
part1.js
import _global from "./global"; // _global.foo === 'a'
import "./part2"; // _global.foo === 'b'
console.log(_global.foo);
part2.js
import _global from "./global";
_global.foo = "b";
Другая потенциальная проблема в исходном коде заключается в том, что global
импортирует тени global
global.