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

Node.js中如何导入动态更新的对象?

问题原因

当你在source.js中直接导出{name: name, age: age}时,CommonJS会导出当前时刻name和age值的拷贝。如果初始时name和age未定义或为空,导出的对象就是空对象{};后续name和age的变化也不会同步到已导出的对象中,因为导出的是静态拷贝,而非动态引用。

解决方案

以下两种方法可以实现获取动态更新的对象:

方法1:导出一个返回最新对象的函数

将source.js改为导出函数,每次调用该函数时都会返回包含最新name和age的对象:

// source.js
// 示例:每秒更新name和age的逻辑
let name = '';
let age = 0;
setInterval(() => {
  name = `User${Math.random().toString(36).slice(2, 8)}`;
  age = Math.floor(Math.random() * 50) + 18;
}, 1000);

// 导出函数,返回最新的对象
module.exports = () => ({ name, age });

在target.js中,调用函数获取最新值:

// target.js
const getPerson = require('./source.js');
// 定时获取并打印最新值
setInterval(() => {
  console.log(getPerson());
}, 1000);

方法2:导出一个可修改的对象,直接更新其属性

不单独定义name和age变量,而是直接修改导出对象的属性——因为对象是引用类型,target.js中引用的是同一个对象,属性变化会实时同步:

// source.js
// 直接导出一个对象
const person = { name: '', age: 0 };
setInterval(() => {
  // 直接修改导出对象的属性
  person.name = `User${Math.random().toString(36).slice(2, 8)}`;
  person.age = Math.floor(Math.random() * 50) + 18;
}, 1000);

module.exports = person;

在target.js中,直接引用该对象即可看到动态变化:

// target.js
const person = require('./source.js');
setInterval(() => {
  console.log(person);
}, 1000);
注意事项
  • 第一种方法适合需要主动获取最新值的场景,每次调用函数都会生成新对象;
  • 第二种方法适合需要实时同步属性变化的场景,所有引用该对象的地方都会看到最新属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:15:40