Node.js模块系统如何处理修改和访问不同版本的同一模块的变量?

时间:2018-03-27 08:36:46

标签: node.js

我有一个自定义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捆绑的前端项目中有这个用例。

0 个答案:

没有答案