Javascript 覆盖module.exports中键的值

Javascript 覆盖module.exports中键的值,javascript,node.js,Javascript,Node.js,我试图在助手文件中存储一个值,该值是在助手的初始要求之后计算的,并且该值不会从未定义更改为未定义(因为它一开始是未知的) 是否有任何方法可以覆盖此值以在其他地方使用 helper.js: module.exports = { key:value } setup.js: var helper = require("./helper.js"); ... // hit a url and get a value helper.key = newValue; usage.js: var h

我试图在助手文件中存储一个值,该值是在助手的初始要求之后计算的,并且该值不会从未定义更改为未定义(因为它一开始是未知的)

是否有任何方法可以覆盖此值以在其他地方使用

helper.js:

module.exports = {
    key:value
}
setup.js:

var helper = require("./helper.js");

... // hit a url and get a value
helper.key = newValue;
usage.js:

var helper = require("./helper.js");

console.log(helper.value) // prints the original value
流量

setup.js -requires-> helper.js
usage.js -requires-> helper.js
我读过module.exports看起来是只读的,但肯定有办法做到这一点

另外,是否可以在初始创建后添加到module.exports

module.exports["key"] = value;
提前谢谢,看起来应该很简单,但这对我来说是个障碍


编辑:忽略第二个问题,我已经完成了这项工作(关于
模块.exports[“key”]

我不确定这里是否有问题。可能是我不了解加载流程,并且存在一些疯狂的范围配置

您可以这样做,也可以更改导出(这是否是一个功能,是另一回事)

想象一下这些模块:

test1.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test2.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test3.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test4.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
运行
节点test4
时的输出为:

{ a: '123', b: 200 }
或者,如果您在模块4中切换模块2和3的加载顺序:

它将成为:

{ a: '132', b: 100 }

我不确定这里是否有问题。可能是我不了解加载流程,并且存在一些疯狂的范围配置

您可以这样做,也可以更改导出(这是否是一个功能,是另一回事)

想象一下这些模块:

test1.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test2.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test3.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
test4.js

module.exports = {
    a: '1'
}
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '2';
    test1.b = 100;
};
var test1 = require('./test1');

module.exports = function() {
    test1.a = test1.a + '3';
    test1.b = 200;
};
var test2 = require('./test2')();
var test3 = require('./test3')();
var test1 = require('./test1');

console.log(test1);
运行
节点test4
时的输出为:

{ a: '123', b: 200 }
或者,如果您在模块4中切换模块2和3的加载顺序:

它将成为:

{ a: '132', b: 100 }

这是我所期望的,但出于某种原因,它似乎没有覆盖helper中的值。我刚刚测试过。你确定你加载的模块的配置是相同的吗?一秒钟后,让我再看一看,你在test2/3.js中修改module.exports中的值是否有意义?没有。将获得相同的精确结果-输出方面(当然,您不必在test4中调用模块。这是我所期望的,但出于某种原因,它似乎没有覆盖帮助程序中的值。我刚刚进行了测试。您确定模块加载的配置是相同的吗?一秒钟后,让我再看一看您在模块内更改值是否有意义。etest2/3.js?Nope.中的xport将获得相同的精确结果-输出方面(当然,您不必调用test4中的模块)。