使用 ES6 语法和动态路径导入模块

Importing modules using ES6 syntax and dynamic path

这个有效:

import app from './../app.js';

但事实并非如此:

import app from path.join(process.cwd(), 'app');

我得到:

SyntaxError: /path/file.js: Unexpected token (5:16)
> 5 | import app from path.join(process.cwd(), 'app');
    |                 ^

可以(and/or如何)使用"dynamic"路径? (不对路径进行硬编码或依赖于相对路径)。

ES6 导入是声明式的,用于静态分析。它们不能是动态的。

通常的预期是,如果您有一些条件导入,则底层路径解析逻辑将负责根据某些静态路径决定加载哪个模块。

或者你会使用异步模块加载器而不是声明式导入。

不,这是不可能的。 ES6 模块需要能够静态解析它们的依赖关系,而不需要执行模块代码,这样 import 语句才能可靠地工作。模块说明符必须是字符串文字。

但是,您选择的模块加载器应该支持动态加载带有变量名的模块。但是,您将无法在模块范围内获得绑定的 app 标识符(并且不能重新导出它),它通常只能在回调中使用。