是否可以在JavaScript(node.js)中导入变量?
我在app.js中有变量:是否可以在JavaScript(node.js)中导入变量?,javascript,node.js,Javascript,Node.js,我在app.js中有变量: var G = {}; module.exports = G; var DATA = G.DATA = 'DATA'; var F1 = G.F1 = function(val) { return val; }; var G = require('./app.js'); console.log(G.DATA); // -> DATA 通过这种方式,我可以在对象G下导出变量,同时,可以通过写入数据直接访问变量,而无需G.前缀 到目前为止还不错 现在,我
var G = {};
module.exports = G;
var DATA = G.DATA = 'DATA';
var F1 = G.F1 = function(val)
{
return val;
};
var G = require('./app.js');
console.log(G.DATA); // -> DATA
通过这种方式,我可以在对象G
下导出变量,同时,可以通过写入数据
直接访问变量,而无需G.
前缀
到目前为止还不错
现在,我想在test.js
中为app.js
运行一个测试:
var G = {};
module.exports = G;
var DATA = G.DATA = 'DATA';
var F1 = G.F1 = function(val)
{
return val;
};
var G = require('./app.js');
console.log(G.DATA); // -> DATA
这是可行的,但我也希望通过写入DATA
直接访问变量,而不使用G.
前缀,比如console.log(DATA);//->数据
当然,我会喜欢的
var DATA=G.DATA
对于每个变量(属性)导出&必需模块G
对象,但显然手动将每个变量添加到测试文件以对应G
对象是一个繁琐的过程
有没有什么方法可以自动做到这一点
到目前为止,我是悲观主义者
JSfunction
将var
包含在自己的范围内,因此理论上,对于每个对象属性,都不可能有一个帮助函数来var
谢谢
另外,我希望避免节点解决方案的任何eval
或VM
。我过去试过,但问题太多了
我可以为每个属性导出和必需的模块G对象分配一个局部变量,但显然,手动将每个变量添加到测试文件以对应G对象是一个繁琐的过程
不,应该是这样的。您——并且只有您——负责模块范围中存在的局部变量。所包含模块的“导出变量”中的任何更改都不会破坏您的代码
访问导入模块上的属性(使用自选名称)是一种方法。这相当于Python的import-app
或import-app-as-g
如果希望某些特定属性作为局部变量,通常会手动选择它们,如Python的“应用程序导入数据”F1中的。在JS中,您将需要一个类似于您在问题中显示的问题。但是,有一个名为的语法特性,它将使这更流畅。您可以在中使用,或:
有没有什么方法可以自动做到这一点
是和否。你不应该这样做,但你可以——就像Python对app import*
中的表示不满一样。举个例子,JavaScript也是如此:
[它]可能会向解释器中引入一组未知的名称
隐藏一些您已经定义的内容
请注意,通常情况下,从模块或
软件包是不受欢迎的,因为它经常导致可读性差的代码。
但是,可以使用它来保存交互式会话中的键入
在JavaScript中,您可以[1]:
[1] :,虽然-这是一个推荐用于优化的方法这通常是一个坏主意。请解释为什么您想直接访问这些变量,这样我们可以建议一个更好的方法。好的,我的项目基本上是JS之上的一个解释器,比如咖啡脚本
,在测试过程中,我希望有一个变量DATA
作为DATA
而不是G.DATA
。到目前为止,我在同一个app.js
文件中有一个测试代码,但如果可能的话,我想将对象中的变量(在本例中为G
)导出到一个单独的文件-test.js
。对象中没有变量,只有属性,它们是完全不同的东西。您仍然可以在test.js中为(k in G){console.log(k,G[k]);}
执行(如果您的测试是显示G的属性值的话)。这个主意不好,但问题很好:-)谢谢您的详细指导。