首页 > 解决方案 > 如何处理从 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。

标签: javascriptnode.jses6-modules

解决方案


推荐阅读