在终端中传递js文件之间的变量....

时间:2017-11-04 05:49:57

标签: javascript node.js terminal

首先,是的,我知道之前已经问过这个问题,但我仍然无法弄清楚如何让它发挥作用。我相信问题是,我在Mac终端上通过node.js单独运行文件,类似于应用程序。

这是合约。我有一个文件bitt1.js,它有var mid = 293.03;

在我的另一个文件otherFile.js中,我有一个if,else语句,具体取决于变量mid(位于bitt1.js中):

if (mid <= 290) { 
    trade = true; 
} else { 
    trade = false; }

问题是,在终端中,我先运行bitt1.js,然后运行otherFile.js。这使得我无法从bitt1.js接收mid变量,并且它是未定义的。

我该如何解决这个问题?我只发现在html或其他内容中使用的东西,其中变量总是“可用”。

我是JS的新手和整个事情,所以我说的一些东西可能是不正确的...我也可能只是愚蠢而答案很明显,但请帮帮我......我已经考虑过创建一个JSON文件并使用其他两个文件从中写入/读取数据,但我觉得有更好的方法......

谢谢!

2 个答案:

答案 0 :(得分:1)

node.js允许导入和导出。

说bitt1.js有:

var mid = 299

console.log(mid)

// Here is where you export the desired value
//export default mid
module.exports.mid = mid

然后,在你的otherFile.js

// you import the value from bitt1.js
var mid = require('./bitt1')

console.log(mid) //Outputs 299

就是这样。

编辑:更新的答案

答案 1 :(得分:1)

开发人员NodeJS的代码可以工作,如果你不想修改变量的值 - 如果你只是想分享变量的初始值,它就能很好地工作。

但是如果你打算在mid的运行时执行期间改变bitt1.js的值并希望使用那个值,也许你可以使用Unix管道来插入它值为bitt1.js的标准输入。

E.g。

// bitt1.js
var mid = 299;
console.log("<mid>%d</mid>", mid); // this is piped to stdin

// otherFile.js
var stdin = process.openStdin();
var data = "";
stdin.on('data', function(chunk) {
  data += chunk;
});
stdin.on('end', function() {
  data.match(/<mid>([\s\S]+)<\/mid>/i);
  var mid = +data.match[1];
  console.log(mid);
});

然后运行:node bitt1.js | node otherFile.js

将从otherFile.js 中打印299

这是一个粗略的解决方案:它应该需要对匹配表达式进行一些未定义的检查,当然管道不允许您在bitt1.js文件中直接打印到控制台 - 您必须重新打印otherFile.js中的所有内容,这会导致重复的代码。

但它可能是一个适合您的解决方案,一切都取决于您的要求!希望这会有所帮助。