我如何 'swap' 在我的应用程序中对 react/addons 做出反应?

How can I 'swap' react for react/addons in my application?

我想使用 Perf 的东西。看来如果我这样做:

var React = require('react/addons');

在我自己的模块中然后是库(react-bootstrap、react-router 等)最终使用了普通 react 的另一个副本,然后事情就崩溃了。我正在使用 browserify。

是否有解决方法或其他方法?

要求 reactreact/addons 会给你相同的对象。 react/addons 需要与 react 相同的模块 (lib/React),并且 react/addons 甚至改变了该对象,以便任何需要 react 的人也将获得插件。

如果你最终在你的包中有多个版本的 React,那是因为你使用的库有 react 作为依赖而不是对等依赖。您应该使用 npm dedupe 来避免这种情况。但是 react-router 具有 react 作为对等依赖项,因此 react-router 将获得与您的模块(带有插件)相同的 react 模块实例。不知道你使用的其他依赖于 React 的包。

事实证明问题出在我的 gulpfile 上。 Tx 关于寻找 browserify shim 的评论,引导我找到解决方案:

我的 browserify 任务(来自 React JS workflow, part 2)在开发期间使用 browserify.external(..) 构建单独的 vendors.js(库)和 main.js(我的应用程序)包从 main.js 中排除库。我只需要添加 "react/addons" 作为外部库以及 "react".

问题解释在这里:

https://github.com/substack/node-browserify/issues/1161