两个变量在 Node.js 中使用 require 引用相同的 config.js 文件(参考问题)

Two variables refers to same config.js File using require (Reference Problem) in Node.js

你好,我在 Node.js

中遇到了这种情况
// config.js
module.exports = {
    dataUrlTest: "http://www.google.com",
};

#!/usr/bin/env node
//main.js

var config = require("./config.js");
var editConfigFile = require("./config.js");

console.log();
console.log(config["dataUrlTest"]); // output: http://www.google.com
console.log(editConfigFile["dataUrlTest"]); // output: http://www.google.com

editConfigFile["dataUrlTest"] = "test";

console.log();
console.log(config["dataUrlTest"]); // output: test
console.log(editConfigFile["dataUrlTest"]); // output: test

When i run "node main.js" the output is as follows:

http://www.google.com
http://www.google.com

test
test

据我了解 Node.js require 函数,它传递文件的引用而不是将文件复制到变量!

我的问题是,有没有办法获得文件的副本而不是引用文件?

我想在不影响配置变量的情况下将 editConfigFile 更改为值,

有这样的事情吗?我研究了一下,没有找到解决办法,有什么想法吗?我将不胜感激。

由于您正在导入一个对象,因此您会得到一个引用。 require 函数基本上导入导出的对象(即 module.exports)。

在 JavaScript 中始终引用对象而不复制对象。这不是特定于节点,而是一般 JavaScript。这意味着 'config' 和 'editConfigFile' 都指向同一个对象。

解决此问题的一种方法是使用 Object.assign() 复制对象。以下是创建副本的方法:

var config = Object.assign({}, require("./config.js")); //This line basically copies module.exports into a new empty object and returns that the config variable
var editConfigFile = Object.assign({}, require("./config.js"));

现在config和editConfigFile都是新对象,不会引用旧对象。