ES6 中的共享状态与 CommonJS 模块
Shared state in ES6 vs CommonJS modules
我可以通过 CommonJS 模块共享状态,但不能通过 ES6 模块。
我想知道为什么,想知道如何通过 ES6 模块共享状态。
CommonJS
main.js:
const shared = require('./shared.js');
shared.val = 2;
require('./child.js');
console.log('main.js', shared);
child.js:
const shared = require('./shared.js');
console.log('child.js', shared);
shared.js:
module.exports = {val:1};
结果:
$ node main.js
child.js { val: 2 }
main.js { val: 2 }
ES6
main.mjs:
import shared from './shared.mjs';
shared.val = 2;
import a from './child.mjs';
console.log('main.mjs', shared);
child.mjs:
import shared from './shared.mjs';
console.log('child.mjs', shared);
export default undefined;
shared.mjs:
export default {val:1};
结果:
$ node main.mjs
child.mjs { val: 1 }
main.mjs { val: 2 }
您可以用完全相同的方式共享状态。
您无法做到的是 运行 导入之间的代码。它们都应该在你的文件的顶部,因为它们基本上被提升到顶部。
如果你把 child 改成这样:
import shared from './shared.mjs';
export default () => {
console.log('child', shared);
};
然后 运行 在您更改共享后:
import shared from './shared.mjs';
import runChild from './child.mjs';
shared.val = 2;
console.log('main', shared);
runChild();
他们都会有 { val: 2 }
.
我可以通过 CommonJS 模块共享状态,但不能通过 ES6 模块。
我想知道为什么,想知道如何通过 ES6 模块共享状态。
CommonJS
main.js:
const shared = require('./shared.js');
shared.val = 2;
require('./child.js');
console.log('main.js', shared);
child.js:
const shared = require('./shared.js');
console.log('child.js', shared);
shared.js:
module.exports = {val:1};
结果:
$ node main.js
child.js { val: 2 }
main.js { val: 2 }
ES6
main.mjs:
import shared from './shared.mjs';
shared.val = 2;
import a from './child.mjs';
console.log('main.mjs', shared);
child.mjs:
import shared from './shared.mjs';
console.log('child.mjs', shared);
export default undefined;
shared.mjs:
export default {val:1};
结果:
$ node main.mjs
child.mjs { val: 1 }
main.mjs { val: 2 }
您可以用完全相同的方式共享状态。
您无法做到的是 运行 导入之间的代码。它们都应该在你的文件的顶部,因为它们基本上被提升到顶部。
如果你把 child 改成这样:
import shared from './shared.mjs';
export default () => {
console.log('child', shared);
};
然后 运行 在您更改共享后:
import shared from './shared.mjs';
import runChild from './child.mjs';
shared.val = 2;
console.log('main', shared);
runChild();
他们都会有 { val: 2 }
.