防止反应被捆绑在我的模块中所以反应不能存在两次

prevent react from being bundled in my module so react can't exist twice

我正在编写一个依赖于 :

的 npm 包
"peerDependencies": {
  "react": "15.4.1",
},
"dependencies": {
  "classnames": "2.2.5",
  "react-onclickoutside": "5.8.3",
  "styled-components": "1.1.2"
}

我已将它们添加为对等依赖项。

我创建了一个 webpack 构建,并且生成了一个 'umd' 模块,我想将其导入到我的应用程序中。

问题是模块中依赖于 react-onclickoutside 的组件抱怨存在 2 React.

这是可以切换并生成此错误的代码:

DropDown = onClickOutside(DropDown, {
  handleClickOutside(instance) {
    return instance.closeMenu;
  },
});

这给我这个错误:

Error: Only a ReactOwner can have refs. You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of React loaded (details: ....).(…)

如果我查看我的 UMD 模块,我可以看到我的对等依赖项是捆绑在一起的,这可能就是我的应用程序中现在有两个 React 的原因。

我想知道如何防止 webpack 在我的模块中捆绑 React 反应

您可以利用 webpack 中的 externals 功能。基本上它会在不捆绑 React 的情况下创建 UMD 模块,并假设它将在其他地方提供