You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中如何在b.js获取a.js更新后的导出变量值?

解决方法:获取更新后的变量值

嘿,这个问题我之前也碰到过!核心原因是JavaScript里原始类型的传值机制——字符串属于原始值,当你在a.js里写exports.A = obj.a时,你其实把obj.a当时的"a"复制了一份导出,而不是导出对obj.a的引用。所以哪怕后面updateA()把obj.a改成了"b",b.js里的A还是之前那个复制出来的"a",不会跟着变。

下面给你几种可行的解决方案:

方案1:导出整个对象

因为对象是引用类型,导出对象的引用后,后续修改对象属性时,其他文件通过引用访问就能拿到最新值。

修改后的a.js:

const obj = {a: "a"}
function updateA() { obj.a = "b" }

// 导出整个obj和updateA函数
module.exports = { obj, updateA }

对应的b.js:

const { obj, updateA } = require("./a.js")

console.log(obj.a) // 输出 "a"
updateA()
console.log(obj.a) // 输出 "b"

方案2:导出一个获取值的函数

通过函数来动态读取当前obj.a的值,每次调用函数都会拿到最新的结果。

修改后的a.js:

const obj = {a: "a"}
function updateA() { obj.a = "b" }
function getA() { return obj.a }

module.exports = { getA, updateA }

对应的b.js:

const { getA, updateA } = require("./a.js")

console.log(getA()) // 输出 "a"
updateA()
console.log(getA()) // 输出 "b"

方案3:用ES6 getter导出

这种方式可以让你像访问普通变量一样获取最新值,本质是通过getter函数动态返回当前值。

修改后的a.js:

const obj = {a: "a"}
function updateA() { obj.a = "b" }

module.exports = {
  // 定义getter属性A
  get A() {
    return obj.a
  },
  updateA
}

对应的b.js:

const { A, updateA } = require("./a.js")

console.log(A) // 输出 "a"
updateA()
console.log(A) // 输出 "b"

内容的提问来源于stack exchange,提问作者chxru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:27:46