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

IT技术 javascript node.js module ecmascript-6
2021-03-06 20:54:42

这有效:

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

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

2个回答

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

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

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

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

那或者你会使用异步module加载器而不是声明性导入。