【发布时间】:2018-02-19 13:24:51
【问题描述】:
我正在制作一个 JavaScript 库,它可以接受来自外部库 (cwl-svg) 的各种插件。在这个库中,我想检查它们是什么类型的插件,所以我使用如下代码:
import {SVGArrangePlugin} from "cwl-svg";
export default function myFunction(plugins){
for (plugin of plugins)
if (plugin instanceof SVGArrangePlugin)
doSomething();
然后,当我构建我的库时,webpack 将 cwl-svg 库添加到我的包中,这是应该的。
现在假设我的库的用户编写了以下代码:
import {SVGArrangePlugin} from "cwl-svg";
import func from "my-library";
func([new SVGArrangePlugin()]);
问题在于,当用户使用new SVGArrangePlugin() 将插件传递给此函数时,他们从自己的cwl-svg 库版本中传入了该类的实例,因为我的库有自己的捆绑版本.因此,plugin instanceof SVGArrangePlugin 始终返回 false,即使 plugin 与该类的实例相同。
如何确保plugin instanceof SVGArrangePlugin 使用 webpack 返回 true?我考虑过使用externals 让我的库导入cwl-svg,但这似乎是用于将自己导出到窗口对象的库,而我宁愿将所有内容都包含在我的模块中。我在这里遗漏了一个明显的设计决策吗?
【问题讨论】:
-
理想情况下,您只需要
cwl-svg.. 的一个实例。但如果这不可能,您可以这样做 ->plugin.constructor.name === "SVGArrangePlugin"
标签: javascript webpack ecmascript-6 commonjs instanceof