是否可以在JavaScript(node.js)中导入变量?

我在中有变量app.js:


var G = {};

module.exports = G;


var DATA = G.DATA = 'DATA';

var F1 = G.F1 = function(val)

{

  return val;

};

通过这种方式,我可以导出对象下的变量G,同时可以直接写入变量DATA而无需G.前缀。


到现在为止还挺好。


现在,我想运行一个测试了app.js在test.js:


var G = require('./app.js');

console.log(G.DATA);  // -> DATA

这可行,但是我也想直接写DATA没有G.前缀的变量来访问变量console.log(DATA);  // -> DATA


当然可以


var DATA = G.DATA;对于每个变量(属性)导出和所需的模块G对象,但显然,将每个变量手动添加到测试文件以对应G对象是一个繁琐的过程。


有什么办法可以自动执行此操作?


到目前为止,我很悲观


JS function包含var在自己的范围内,因此从理论上讲,没有办法var为每个对象属性都提供一个辅助函数。


谢谢。


PS。我想避免任何eval或VM节点解决方案。我过去曾经尝试过,但问题太多了。


幕布斯6054654
浏览 830回答 2
2回答

Cats萌萌

我可以为每个属性导出和所需模块G对象分配局部变量,但是显然,将每个变量手动添加到测试文件以对应G对象是一个繁琐的过程。不,这就是应该的工作方式。您-并且只有您-负责模块范围中存在哪些局部变量。所包含模块的“导出变量”中的任何更改均不应破坏您的代码。访问导入的模块上的属性(具有自选名称)是一种方法。这与Python import app或相当import app as g。如果您希望某些特殊属性作为局部变量,通常会像在Python中一样手动选择它们from app import DATA, F1。在JS中,您将需要一个多条var语句,就像您在问题中显示的那样。但是,有一个语法功能称为解构分配,这将使此操作更加流畅。您可以在JavaScript 1.7+(Gecko),CoffeeScript或EcmaScript 6中使用它:var {DATA, F1} = require("app.js");有什么办法可以自动执行此操作?是的,不是。您不应该这样做,但是可以-就像Python的皱眉一样from app import *。引用他们说的话,对于JavaScript同样如此:[它]在解释器中引入了一组未知的名称,可能隐藏了您已经定义的某些内容。请注意,通常不赞成*从模块或包进行导入,因为这通常会导致可读性差的代码。但是,可以使用它来保存交互式会话中的键入。在JavaScript中,您可以[1] 使用with-statement:with (require("app.js")) {    …}[1]:并非处于ES5.1 严格模式下 -建议进行优化

慕田峪7331174

好吧,我的项目基本上是在JS,像顶部的解释coffee-script,我想有一个变量DATA如DATA不G.DATA在测试过程中。到目前为止,我在同一app.js文件中有一个测试代码,但是如果可能的话,我想将对象(在这种情况下G)中的变量导出到单独的文件-中test.js。
打开App,查看更多内容
随时随地看视频慕课网APP