7

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

import Animal from './dog';

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

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

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

4

3 回答 3

2

您不能动态定义依赖关系。请参阅此问题及其接受的答案

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

答:不带import语句。import 和 export 的定义方式使得它们可以静态分析,因此它们不能依赖于运行时信息。

于 2015-08-17T16:58:20.547 回答
2

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

希望这对偶然发现这篇旧帖子的人有所帮助。

于 2017-09-13T22:55:49.600 回答
0

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

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

于 2015-09-09T08:36:40.127 回答