javascript - 如何处理从 JavaScript 模块导入的动态对象?
问题描述
我想为用户创建一种从 JavaScript 模块导入任何命名对象的方法,就像 Python 的模块级别__getattr__
(3.7+)一样。
我现在使用一个Proxy
对象来为其他对象上不存在的属性提供陷阱,并且我想在模块上创建类似的行为。
到目前为止我已经尝试过:
// mymodule.js
export default new Proxy({}, {
get(target, property) {
if (property in target) {
return target[property];
}
// Returning a simple function just for testing
return function() {
console.log('Hello World');
}
}
});
导入这个Proxy
对象工作得很好,因为它是default
导出:
import p from './mymodule.js';
// Then I can get the hello function by using any name
p.hello(); // -> Hello World
p.anythingWorks(); // -> Hello World
但是尝试导入一个不存在的导出:
import { hello } from './mymodule.js';
导致错误The requested module './mymodule.js' does not provide an export named 'hello'
是真的,但我希望它会被get
陷阱处理,我不太了解模块内部如何工作。
如何实现这个功能?如何使这个Proxy
对象处理模块导入?
如果这很重要,我正在使用最新的 Node.js 版本 13.5.0。
解决方案
推荐阅读
- reactjs - 运行 npm start 时无法解决此问题
- angularjs - TTFB 延迟 22 秒(Angular7 + IIS 服务器)
- android-studio - 无法安装HAXM
- python - 当有多个有效解决方案时,如何使 Networkx Hopcroft Karp 匹配始终给出相同的结果?
- python - tkinter - 如何在命令功能结束之前更新按钮文本?
- github - 当我将存储库连接到 MongoDB 时,.gitignore 停止工作
- javascript - 打字稿:键入对象到数组转换的更简单方法
- python - N64 控制器认为它是 Neogeomini-pad 或 ZD-V+ 有线游戏控制器
- excel - Excel data validation expanding incorrectly
- google-app-engine - 根据时间戳的包含过滤器,日志不会在日志接收器中导出