如何处理来自JavaScript模块的动态对象导入?

如何处理来自JavaScript模块的动态对象导入?,javascript,node.js,es6-modules,Javascript,Node.js,Es6 Modules,我想为用户创建一种从JavaScript模块导入任何命名对象的方法,就像Python的模块级\uu getattr\uu(3.7+) 我现在使用代理对象为其他对象上不存在的属性提供陷阱,我希望在模块上创建类似的行为 到目前为止,我所尝试的: //mymodule.js 导出默认的新代理({}{ 获取(目标、属性){ if(目标中的属性){ 返回目标[属性]; } //返回仅用于测试的简单函数 返回函数(){ log('helloworld'); } } }); 导入此代理对象效果很好,因为它是

我想为用户创建一种从JavaScript模块导入任何命名对象的方法,就像Python的模块级
\uu getattr\uu
(3.7+)

我现在使用
代理
对象为其他对象上不存在的属性提供陷阱,我希望在模块上创建类似的行为

到目前为止,我所尝试的:

//mymodule.js
导出默认的新代理({}{
获取(目标、属性){
if(目标中的属性){
返回目标[属性];
}
//返回仅用于测试的简单函数
返回函数(){
log('helloworld');
}
}
});
导入此
代理
对象效果很好,因为它是
默认
导出:

import p from./mymodule.js';
//然后,我可以使用任何名称获得hello函数
p、 你好();//->你好,世界
p、 anythingWorks();//->你好,世界
但尝试导入不存在的单个导出:

从“/mymodule.js”导入{hello};
导致请求的模块出现错误。'/mymodule.js'没有提供名为'hello'的导出,这是真的,但我希望它将由
get
陷阱处理,我不太了解模块内部的工作方式

如何实现此功能?如何使此
代理
对象处理模块导入


如果有必要的话,我正在使用最新的Node.js版本13.5.0。

这是不可能的(如果不通过transpiler返回到commonjs,并且弄乱
模块.exports
对象)。任何
import
ed名称都必须在某处显式声明。请注意(与Python不同),导出不是对象(您可以代理),它们是声明变量的别名表。@Bergi谢谢,我已经尝试了您的suugestion,并将
代理
对象分配给
模块。导出
有效,但是,如果我将当前ES模块代码传输到CommonJS,这个功能以后会添加到ES模块吗?不,这个黑客不是一个功能,它几乎不会成为ES模块标准的一部分。可静态分析的输出是ES6模块的核心质量,使其动态化是不可能的。