使用ES6语法动态导入JavaScript模块?

5

如何在ES2015+中动态导入模块?

例如,不是...

import {SomeClass} from 'lib/whatever/some-class';

我在运行时不知道路径,因此我想将路径存储在变量中,并从该模块导入特定内容:

function doDynamicStuff(path) {
    let importedThing = ...; //import * as importedThing from path;
    let thingIReallyWant = importedThing.someExportedVariable;

    ...
}

我不确定要使用哪种语法,或者是否可以完全做到这一点。我尝试使用let importedThing = require(path);但我们没有使用RequireJS


@PHPglue ES6模块不仅限于Node.js。虽然它们尚未具备浏览器语义,但是针对浏览器的构建系统已经在使用它们了。 - Jeremy
你是不知道类名还是路径?还是两者都不知道? - Felix Kling
@PHPglue 我们不使用 node,我们使用 Aurelia - Josh M.
@FelixKling 我知道路径和类名(始终是相同的类名,只是来自动态模块/路径)。 - Josh M.
1个回答

3

出于设计原因,ES2015不支持动态导入。

在当前的JavaScript模块系统中,您必须执行代码以了解导入和导出是什么。这就是为什么ECMAScript 6与那些系统分手的主要原因:通过将模块系统构建到语言中,可以在语法上强制执行静态模块结构。

...

模块的结构是静态的,这意味着您可以在编译时(静态地)确定导入和导出-您只需要查看源代码,而不必执行它。

来自ECMAScript 6模块:最终语法

要动态导入模块,您必须显式地使用模块加载器(如RequireJS或SystemJS)


我们正在使用 _SystemJS_,谢谢! - Josh M.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接