为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幕布斯6054654 2019-09-27 15:45:37
我在中有变量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节点解决方案。我过去曾经尝试过,但问题太多了。
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

我可以为每个属性导出和所需模块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 严格模式下 -建议进行优化


查看完整回答
反对 回复 2019-09-27
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

好吧,我的项目基本上是在JS,像顶部的解释coffee-script,我想有一个变量DATADATAG.DATA在测试过程中。到目前为止,我在同一app.js文件中有一个测试代码,但是如果可能的话,我想将对象(在这种情况下G)中的变量导出到单独的文件-中test.js

查看完整回答
反对 回复 2019-09-27
  • 2 回答
  • 0 关注
  • 802 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信