require()
JavaScript/Node.js 每次导入其他模块时是否执行相同的文件?
如果是,我怎样才能在一个文件中有一个数组并从另一个 JS 文件中追加/更新其中的值?例如,我在一个文件中有一个数组,我正在从多个文件更新数组,我希望它们都只与更新后的数组交互。我怎样才能做到这一点?
require()
JavaScript/Node.js 每次导入其他模块时是否执行相同的文件?
如果是,我怎样才能在一个文件中有一个数组并从另一个 JS 文件中追加/更新其中的值?例如,我在一个文件中有一个数组,我正在从多个文件更新数组,我希望它们都只与更新后的数组交互。我怎样才能做到这一点?
模块被缓存,如果你再次加载它们,缓存的副本被加载。
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
相反,您可以从模块中公开一个函数来读取数组值,因此它将始终获取一个新值。
const myArray = [1];
const get = () => {
return myArray;
};
const update = (data) => {
myArray.push(data);
};
exports.get = get;
exports.update = update;
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)
来更新。