Puedo compartir el estado a través de módulos CommonJS, pero no a través de módulos ES6.
Me pregunto por qué y quiero saber cómo compartir el estado a través de los módulos ES6.
principal.js:
const shared = require('./shared.js'); shared.val = 2; require('./child.js'); console.log('main.js', shared);niño.js:
const shared = require('./shared.js'); console.log('child.js', shared);compartido.js:
module.exports = {val:1};Resultado:
$ node main.js child.js { val: 2 } main.js { val: 2 }principal.mjs:
import shared from './shared.mjs'; shared.val = 2; import a from './child.mjs'; console.log('main.mjs', shared);niño.mjs:
import shared from './shared.mjs'; console.log('child.mjs', shared); export default undefined;compartido.mjs:
export default {val:1};Resultado:
$ node main.mjs child.mjs { val: 1 } main.mjs { val: 2 }Puede compartir el estado exactamente de la misma manera.
Sin embargo, lo que no puede hacer es ejecutar código entre importaciones. Todos deberían estar en la parte superior de su archivo porque básicamente se elevan a la parte superior.
Si cambias child a algo como esto:
import shared from './shared.mjs'; export default () => { console.log('child', shared); };Y luego ejecútalo después de que hayas cambiado lo compartido:
import shared from './shared.mjs'; import runChild from './child.mjs'; shared.val = 2; console.log('main', shared); runChild(); Ambos tendrán { val: 2 } .