require()
在JavaScript/Node.js中每次被导入到其他模块时,是否执行相同的文件?
如果是,我该如何在一个JS文件中拥有一个数组并从另一个JS文件中添加/更新值呢? 例如,我有一个文件中的数组,并且我从多个文件中更新该数组,我希望它们都只与更新后的数组进行交互。我该如何实现这一点?
require()
在JavaScript/Node.js中每次被导入到其他模块时,是否执行相同的文件?
如果是,我该如何在一个JS文件中拥有一个数组并从另一个JS文件中添加/更新值呢? 例如,我有一个文件中的数组,并且我从多个文件中更新该数组,我希望它们都只与更新后的数组进行交互。我该如何实现这一点?
模块被缓存,如果再次加载它们,将加载缓存副本。
https://nodejs.org/api/modules.html#modules_require_cache
模块在被引用时会被缓存在该对象中。通过从该对象中删除键值对,下一次进行 require 操作时将重新加载该模块。对于原生插件不适用,重新加载会导致错误。 同时也可以添加或替换条目。在原生模块之前会首先检查该缓存,如果一个与原生模块名称相匹配的名称被添加到缓存中,则任何 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()
来读取值,使用myArray.update(data)
来更新。
require()
只运行一次文件,然后使用缓存的导出。不确定您问题的其余部分在问什么,或者是否仍然适用。 - Jacob G