将依赖关系注入ES2015模块

是否有可能将依赖关系注入ES2015模块,如其他编程语言(如C#或Java)? 如果我导入一个模块,我创建一个硬依赖关系,并且不能在运行时稍后改变它。 例如,我有以下JavaScript代码:

import Animal from './dog';

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

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

我知道有一些DI框架如Scatter,Electrolyte,Wire等,但不幸的是它们中的大多数都需要一些特殊的语法,并且不适用于ES2015模块。


你不能动态定义依赖关系。 看到这个问题及其接受的答案:

问题: node.js中的ES6变量导入名称?

答:不包括进口声明。 导入和导出的定义是可以静态分析的,所以它们不能依赖运行时信息。


如果您使用Webpack进行捆绑,则可以使用inject-loader来实现此目的。

希望这可以帮助那些在这个旧帖子上磕磕绊绊的人。


我转移到SystemJS。 使用SystemJS,你可以像System.import('foo').then(() => console.log('Loaded));那样进行动态导入System.import('foo').then(() => console.log('Loaded));

另一个优点是系统将成为新的ECMAScript标准模块加载器系统。

链接地址: http://www.djcxy.com/p/28137.html

上一篇: Inject dependencies into ES2015 module

下一篇: MongoError: Can't canonicalize query: BadValue bad order array [2]