2016-06-10 89 views
4

是ES2015 +,如何动态导入模块?使用ES6语法动态导入JavaScript模块?

E.g.而不是...

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

+0

@PHPglue ES6模块并不互斥Node.js的他们还没有浏览器内语义,但是浏览器构建系统已经在使用它们。 –

+0

你不知道班级名称还是你不知道路径?或两者? –

+0

@PHPglue我们不使用'node',我们使用'Aurelia'。 –

回答

3

ES2015不支持按设计动态导入。

在当前的JavaScript模块系统中,您必须执行代码才能找出导入和导出的内容。这就是ECMAScript 6与这些系统冲突的主要原因:通过将模块系统构建为语言,您可以在语法上强制执行静态模块结构。

...

模块的结构是,你可以决定在编译时(静态),进口和出口的静态方法 - 你只需要看看源代码,您不必执行它。

ECMAScript 6 modules: the final syntax

要动态导入模块,你必须明确地使用模块加载器(如RequireJSSystemJS

+0

我们使用_SystemJS_,谢谢! –