将依赖项注入 ES2015 模块

Inject dependencies into ES2015 module

是否可以像 C# 或 Java 等其他编程语言一样,将依赖项注入 ES2015 模块?如果我导入一个模块,我就会对它产生硬依赖,并且以后在运行时无法更改它。例如,我有以下 Java 脚本代码:

import Animal from './dog';

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

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

我知道有一些 DI 框架,比如 Scatter, Electrolyte, Wire and so on but unfortunately most of them require some special syntax and are not made for ES2015 modules

您不能动态定义依赖项。 :

Question: ES6 variable import name in node.js?

Answer: Not with the import statement. import and export are defined in such a way that they are statically analyzable, so they cannot depend on runtime information.

我搬到了SystemJS。使用 SystemJS,您可以进行动态导入,例如 System.import('foo').then(() => console.log('Loaded));

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

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

希望这对偶然发现这个旧 post 的人有所帮助。