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

时间:2015-05-20 03:56:23

标签: javascript node.js module ecmascript-6

这有效:

boolean

但这不是:

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

我正在:

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

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

2 个答案:

答案 0 :(得分:49)

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

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

答案 1 :(得分:11)

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

一般来说,期望是如果你有一些条件导入,那么底层路径解析逻辑的责任就是根据一些静态路径决定加载哪个模块。

您或您使用异步模块加载程序而不是声明导入。