当在主文件上需要变量时,如何阻止变量在 nodejs 中被覆盖?

How do I stop variables from overwriting in nodejs when requiring them on a main file?

我有多个脚本,它们几乎相同但在顶层设置的 'params' 对象上具有不同的参数。当我 require() 同一文件上的脚本同时 运行 它们时, 'params' 对象被覆盖并且只使用最后一个必需的 'params' 。我该如何阻止它?

文件 1:

params = {
        name: "John",
        salary: "50"
    }

文件 2:

params = {
        name: "Victoria",
        salary: "10"
    }

文件 3:

params = {
        name: "Veka",
        salary: "80"
    }

主文件:

require(file1.js)();
require(file2.js)();
require(file3.js)();
// do things

我知道我可以更改每个文件的名称,但我想我遗漏了什么。提前谢谢你。

期望的行为是什么?您似乎只有一个全局变量,它自然不能同时保存多个不同的值。 如果您需要访问所有三个文件提供的数据并且您需要它是一个全局变量(而不是,比如说,将您的文件变成返回值的函数)那么你可以改为将其作为单个文件插入的数组或对象。

数组:

require 调用前的主文件:

params = []

文件1(其他文件同理):

params.push({
    name: "John",
    salary: 50
});

对象:

主文件:

params = {}

文件 1:

params['file1'] = {
    name: "John",
    salary: 50
};

备选

除非绝对必要,否则不鼓励使用全局变量,因为它们会导致令人困惑的错误并且难以调试。相反,您可以这样做:

文件 1

function getData() {
  return {
    name: 'John',
    salary: 50
  };
}
module.exports = getData;

主文件:

const file1Data = require('./file1.js')();

您需要了解 Javascript 中的闭包和变量作用域。

这里有一个有趣的 articles

因此,您需要将这些变量封装在它们自己的函数中。

const yourFunctionFile1 = () => {
   const params = {
        name: "Veka",
        salary: "80"
    }
   // do whatever you want
}
module.exports = yourFunctionFile1

您可以在每个文件中导出 params 对象,然后在您的主文件中将它们作为变量引用:

文件 1:

module.exports.params = {
  name: "John",
  salary: "50"
}

文件 2:

module.exports.params = {
  name: "Victoria",
  salary: "10"
}

主文件:

let params1 = require('./file1').params
let params2 = require('./file2').params