Современные реализации Javascript (ES6 +) находятся в стадии разработки, некоторые синтаксисы работают с NodeJS (node --experimental-modules
) и хорошими браузерами , другие нет.
Это единственный способ сделатьбез стоимости «загрузить все» (см. решение @Markus), но с затратами на неглобальный импорт, требуется некрасивый блок для определения области действия и асинхронной операции ... Первый шаг - понять базовый синтаксис блока импорта:
import('./MyClass-v3.mjs').then(({default: MyClass}) => {
// can use MyClass only here in this block
let x = new MyClass();
console.log("DEBUG=",x);
});
Их, собрав все вместе, выбор argv и необязательный импорт.
Решение
const classes = {
a: './MyClass-v1.mjs'
,b: './MyClass-v3.mjs'
,c: './MyClass-v3.mjs'
};
import(classes[process.argv[2]] || classes.c ).then(({default: MyClass}) => {
let x = new MyClass();
console.log("DEBUG=",x);
});
PS: некоторая магия (без рационального) заключается в использовании({default: MyClass})
вместо (MyClass)
.
Спасибо
@Bergi (!) За объяснение этого решения (см. Комментарии к вопросу).