3

require()JavaScript/Node.js 每次导入其他模块时是否执行相同的文件?

如果是,我怎样才能在一个文件中有一个数组并从另一个 JS 文件中追加/更新其中的值?例如,我在一个文件中有一个数组,我正在从多个文件更新数组,我希望它们都只与更新后的数组交互。我怎样才能做到这一点?

4

1 回答 1

3

模块被缓存,如果你再次加载它们,缓存的副本被加载。

https://nodejs.org/api/modules.html#modules_require_cache

需要时,模块会缓存在此对象中。通过从这个对象中删除一个键值,下一个 require 将重新加载模块。这不适用于本机插件,重新加载将导致错误。

添加或替换条目也是可能的。在本地模块之前检查此缓存,如果将与本地模块匹配的名称添加到缓存中,则不再需要调用接收本地模块。小心使用!

您可以使用https://www.npmjs.com/package/clear-module

const clearModule = require('clear-module');
const myArray = clearModule('./myArray'); // but you need load this everytime to get fresh copy of that array

相反,您可以从模块中公开一个函数来读取数组值,因此它将始终获取一个新值。

myArray.js

const myArray = [1];

const get = () => {
  return myArray;
};

const update = (data) => {
  myArray.push(data);
};

exports.get = get;
exports.update = update;

index.js

const myArray = require('./myArray');

console.log(myArray.get()); // [1]
console.log(myArray.update(2)); // update the value
console.log(myArray.get()); // [1,2]

所以现在使用myArray.get()always 来读取值并使用myArray.update(data)来更新。

于 2021-03-16T01:33:07.600 回答