将依赖关系注入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]