NodeJS - 从另一个文件中获取变量而不是每次调用都重新定义它?

时间:2017-01-07 21:57:43

标签: javascript node.js export global-variables

所以我有2个文件mapgen.js和一个main.js.在mapgen.js中有一个函数可以生成一个巨大的2d数组。我想在main.js中使用这个aray,但是不希望生成地图的函数每次都需要运行它所需要的'在main.js.我也想最终能够编辑地图数组。

示例:(不是真正的代码只写了一些废话来说明问题所在)

mapgen.js:

var map;
function mapGen(){
    //make the map here
      this function takes like 2 seconds and some decent CPU power, so 
      don't want it to ever run more than once per server launch
    map = map contents!
}

main.js

var map = require mapgen.js;
console.log(map.map);
//start using map variable defined earlier, but want to use it without
  having to the run the big funciton again, since it's already defined.

我知道我必须在某个地方使用module.exports,但我不认为这样可以解决我的问题。我会将它写入一个文件,但是读取和编辑的速度比将它保留在RAM中要慢得多吗?以前我通过将所有内容保存在1个文件中来解决这个问题,但现在我需要清理它。

2 个答案:

答案 0 :(得分:0)

我不是专家,但如果你在mapgen.js中放入一个不起作用的条件?

var map;
function mapGen(){
    if(!map){
       //your code here
       map = map contents!
    }
}

将它与全局变量和/或module.exports结合使用 How to use global variable in node.js?

答案 1 :(得分:0)

要求模块不会自动调用该功能。您可以在main.js文件中执行此操作。

mapgen.js

module.exports = function mapGen() {
  return [/* hundreds of items here. */];
};

main.js

// Require the module that constructs the array.
const mapGen = require('./mapgen');

// Construct the array by invoking the mapGen function and 
// store a reference to it in 'map'.
const map = mapGen(); // `map` is now a reference to the returned array.
// Do whatever you want with 'map'.
console.log(map[0]); // Logs the first element.