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

58

这个有效:

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
2个回答

63

不,这是不可能的。ES6模块需要能够静态地解析它们的依赖项,而不执行模块代码,以确保import语句可靠运行。模块规范符必须是一个字符串文字。

但是,您选择的模块加载器应支持使用变量名动态加载模块。但是您无法在模块作用域中获取到绑定的app标识符(也不能重新导出它),通常它只能在回调函数中使用。


16

ES6导入是声明性的,旨在进行静态分析。它们不能是动态的。

通常希望的是,如果你有一些条件性的导入,底层路径解析逻辑将根据某些静态路径决定要加载哪个模块。

否则,您将使用异步模块加载器而不是声明式导入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接