Я бы хотел, чтобы пользователи могли импортировать любой именованный объект из модуля 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, если это имеет значение.