我有一个自定义Node.js模块 fooModule ,它有一个私有变量 foo ,以及公共getter和setter来修改这个变量。
我还有另外两个模块: zooModule 取决于 fooModule@^1.0.1 ,目前无法使用预发布和 barModule 这取决于 fooModule@^1.0.2-0 (包含一些修复的预发布补丁版本)和 zooModule 。
barModule 首先设置 foo 变量值,然后 zooModule 读取 foo 的值。
我注意到当 fooModule 依赖项的版本相同时,它会按预期工作,换句话说, foo 变量在两个模块之间共享。但是,当从 zooModule 访问 foo 时,使用不同的版本会导致 undefined 。
这是一个用于演示逻辑的小型伪示例。每个模块都是独立的npm包。
// fooModule.js
let foo;
export const getFoo = () => foo;
export const setFoo = (newFoo) => foo = newFoo;
// zooModule.js uses v.1.0.1 of the fooModule
import { getFoo } from './fooModule.js'
export const zooFunc = () => {
const zoo = getFoo();
if(!zoo) return;
...
return zoo; //result depends on zoo
};
// barModule.js uses v.1.0.2-0 of the fooModule
import { setFoo } from './fooModule.js'
import { zooFunc } from './zooModule.js'
setFoo('foo');
zooFunc(); // What is the output?
就我而言,在fooModule的不同版本的情况下,我们变成了模块的两个不同实例,因此变量变量foo?
我试图尽可能地解释这个问题,但很难解释我的意思,对不起,如果还不清楚的话。 可以给我一些提示,在那里可以阅读更多有关这方面的内容,或者给出一些关于如何工作的解释。谢谢你的时间。
编辑:我忘了提到我在webpack捆绑的前端项目中有这个用例。