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

这个问题已经在这里有了答案:

  • node.js中的ES6变量导入名称? 9个答案

这有效:

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');
    |                 ^

有可能(和/或如何)使用“动态”路径? (不对路径进行硬编码或依赖相对路径)。

Félix Sanz asked 2020-06-21T22:58:22Z
2个解决方案
52 votes

不,这是不可能的。 ES6模块需要能够静态解析其依赖性,而无需执行模块代码,以便app语句能够可靠地工作。 模块说明符必须是字符串文字。

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

Bergi answered 2020-06-21T22:58:41Z
12 votes

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

通常,期望是如果您有条件导入,则基础路径解析逻辑负责根据某个静态路径来决定要加载哪个模块。

那或者您将使用异步模块加载器而不是声明性导入。

loganfsmyth answered 2020-06-21T22:59:10Z
translate from https://stackoverflow.com:/questions/30340005/importing-modules-using-es6-syntax-and-dynamic-path