假设我正在构建自己的命令行,我希望能够访问甚至更改NodeJS中正常定义的任何变量。我将在另一个名为cmd[1]
的变量中定义变量的名称。经过一段时间的研究,我得出结论,没有全局对象包含所有已定义的变量。如何返回另一个变量中描述的变量的数据?这是一个小代码块,解释了我想要实现的目标:
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: 'CMD> '
});
rl.prompt();
rl.on('line', (line) => {
var commandl = line.trim();
var cmd = commandl.split(' ');
switch(cmd[0]) {
case 'vr':
//here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]].
break;
case 'spit':
//here i'd like to log an object with every defined variables and its live changes
break;
default:
console.log(`${line.trim()}: command not found`);
break;
}
rl.prompt();
}).on('close', () => {
process.exit(0);
});
必须有一个解决方案。
答案 0 :(得分:0)
@Waseem I.指出这只适用于REPL。
但是我要把它留在这里作为后代。
在Node.js中,等同于window
的是global
。例如:
> var a = 2;
> global.a // == 2
这包含每个全局变量(包括process
之类的系统变量)和您定义的变量(如上所示)。
答案 1 :(得分:0)
为什么不能创建store
并使用它?
<强> store.js 强>
// store.js
module.exports = {}
<强> app.js 强>
// app.js
var store = require('./store');
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
prompt: 'CMD> '
});
rl.prompt();
rl.on('line', (line) => {
var commandl = line.trim();
var cmd = commandl.split(' ');
switch(cmd[0]) {
case 'vr':
store.vr = cmd[1];
//here i'd like to log the variable which name is in cmd[1]. if there was a global object i would assume i could just global[cmd[1]].
break;
case 'spit':
store.spit = '...';'
break;
default:
console.log(`${line.trim()}: command not found`);
break;
}
rl.prompt();
}).on('close', () => {
process.exit(0);
});
<强> other.js 强>
// other.js
var store = require('./store');
console.log(store.vr);
虽然您可以使用global
,但建议使用此方法,因为您可以轻松地模拟商店以进行测试。