将依赖项注入ES2015模块

时间:2015-08-14 10:52:51

标签: javascript dependency-injection ecmascript-6 es6-module-loader

是否可以像ES#或其他编程语言一样将依赖注入ES2015模块?如果我导入一个模块,我会为它创建一个硬依赖项,并且以后不能在运行时更改它。例如,我有以下JavaScript代码:

import Animal from './dog';

class Person {
  feedAnimal() {
    new Animal().feed();
  }
}

我正在导入狗模块。但是,如果我想把它改成猫呢?目前我必须手动修改第1行,但在某些情况下我希望它可以从外部配置,以便在某些条件下应该有一只猫,在某些其他条件下它应该是猫。所有可以通过经典依赖注入完成的事情。

我知道有一些DI框架,例如ScatterElectrolyteWire等等,但遗憾的是大多数都需要一些特殊的语法并且ES2015 modules制作。

3 个答案:

答案 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标准模块加载器系统。

相关问题