Как обработать импорт объекта Dynami c из модуля JavaScript? - PullRequest
0 голосов
/ 07 января 2020

Я бы хотел, чтобы пользователи могли импортировать любой именованный объект из модуля JavaScript, точно так же как Python уровень модуля __getattr__ (3.7 +).

I'm теперь использую объект 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, если это имеет значение.

...