是否可以像ES#或其他编程语言一样将依赖注入ES2015模块?如果我导入一个模块,我会为它创建一个硬依赖项,并且以后不能在运行时更改它。例如,我有以下JavaScript代码:
import Animal from './dog';
class Person {
feedAnimal() {
new Animal().feed();
}
}
我正在导入狗模块。但是,如果我想把它改成猫呢?目前我必须手动修改第1行,但在某些情况下我希望它可以从外部配置,以便在某些条件下应该有一只猫,在某些其他条件下它应该是猫。所有可以通过经典依赖注入完成的事情。
我知道有一些DI框架,例如Scatter,Electrolyte,Wire等等,但遗憾的是大多数都需要一些特殊的语法并且不为ES2015 modules制作。
答案 0 :(得分:2)
您无法动态定义依赖项。 See this question and its accepted answer:
问题: node.js中的ES6变量导入名称?
答案:不使用import语句。导入和导出的定义方式是静态可分析的,因此它们不能依赖于运行时信息。
答案 1 :(得分:2)
如果要捆绑Webpack,可以使用inject-loader来实现此目的。
希望这可以帮助那些偶然发现这个老帖子的人。
答案 2 :(得分:-1)
我搬到了SystemJS。使用SystemJS,您可以进行动态导入,如System.import('foo').then(() => console.log('Loaded));
另一个优点是System将成为新的ECMAScript标准模块加载器系统。