【问题标题】:Dynamically import JavaScript module using ES6 syntax? [duplicate]使用 ES6 语法动态导入 JavaScript 模块? [复制]
【发布时间】:2016-10-11 23:23:34
【问题描述】:

是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 独有的。它们还没有浏览器内语义,但浏览器构建系统已经在使用它们。
  • 不知道类名还是不知道路径?还是两者兼而有之?
  • @PHPglue 我们没有使用node,我们使用的是Aurelia。
  • @FelixKling 我知道路径和类名(总是相同的类名,只是来自动态模块/路径)。

标签: javascript import ecmascript-6


【解决方案1】:

ES2015 不支持动态导入。

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

...

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

来自ECMAScript 6 modules: the final syntax

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

【讨论】:

  • 我们正在使用 SystemJS,谢谢!
猜你喜欢
  • 2015-08-01
  • 2018-05-02
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2018-01-15
  • 2015-07-27
  • 1970-01-01
相关资源
最近更新 更多