将依赖项注入 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 的人有所帮助。
是否可以像 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 的人有所帮助。