两个变量在 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都是新对象,不会引用旧对象。
你好,我在 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都是新对象,不会引用旧对象。