¿Es posible obtener un módulo "global" individual para cada instancia?
import MyModule from './index.js'; const first = new MyModule(); const second = new MyModule(); // PLEASE SEE EXAMPLE BELOW FOR LOGS // expect to log for both: // 1. "in entry: true" // 2. "in init: true" // but second module logs: // 1. "in entry: false" // 2. "in init: false" El problema es que ambos comparten globals y 1. la instancia cambia la propiedad a false .
¿Cuáles son mis opciones para tener un módulo globals individual por instancia?
¡PD! Tengo decenas de miles de líneas de código heredado. Sería 100 veces mejor si no tuviera que cambiar/eliminar/refactorizar los contenidos de globals.js ni estas importaciones import globals from './globals.js'; . Sin embargo, dé todas sus ideas: necesito arreglarlo, incluso si necesito cambiar mucho.
índice.js
import globals from './globals.js'; import init from './init.js'; export default function MyModule (conf) { console.log('in entry:', globals.state1); init(); }globales.js
export default { state1: true, };init.js
import globals from './globals.js'; export default function init () { console.log('in init:', globals.state1); globals.entry1 = false; }Dado que un objeto se pasa por referencia, debe crear una copia cada vez que use globals .
Una buena manera es exportar una función como:
/* globals.js */ const globals = { // Maybe wrap the object in Object.freeze() to prevent side effects state1: true, }; export default () => ({ ...globals });Luego puede llamar a la función para crear una copia cada vez que la necesite.
/* init.js */ import getGlobals from './globals.js'; export default function init () { const globals = getGlobals(); console.log('in init:', globals.state1); globals.entry1 = false; }