在 React 应用程序中使用相同依赖项的不同版本

Consuming different versions of same dependency in react application

假设 A 是一个渲染组件 B 的 React 应用程序(考虑将 B 安装为 npm 依赖项以在 A 中使用) . AB 使用版本 1.0 的 npm 依赖项。 现在 A 需要将 B 中使用的依赖项版本升级为 1.1。 由于升级后的版本不同 implementation/usage,有没有办法在 B 中使用的版本进行更改而不影响 A[=21] 中的功能=]? 在 A's package.json 的 peerDependencies 中添加升级版本可以吗?我对此没有很清楚的认识。请指导。

我相信 npm 和 yarn(包管理器)有可用的包别名,它允许您以不同的名称安装包,在您的情况下是同一包的不同版本。

npm i abc1@npm:abc@1
npm i abc2@npm:abc@2

这应该有效。

据我所知,我们将依赖称为 X

一个 -> X v1

乙 -> X v2

继续之前:

Peer-dependency 被添加到需要由至少一个包或使用它的应用程序安装的包中。这样做是为了避免最后出现较大的包大小。这里的版本应该兼容,否则会出现问题。

我假设 B 是捆绑的,否则会导致问题,因为 B 将使用当前 node_modules 中的 X,而当前 node_modules 有一些其他版本的 X,这可能会导致错误。

现在如果我们捆绑了 B 并且它有 X 作为依赖项,我认为不会有任何问题,因为 B 将引用它自己的代码来完成该工作,而 A 将从 node_modules,很少有库会在 windows 或 DOM 上像 styled-component 那样造成问题,但大多数库都提供了解决问题的方法。

如果加载了多个版本,一些库功能将无法像 React hooks 那样工作,但大多数功能都像 lodash 等 charm 一样工作。

我并不是说任何人都不好,他们只是受到他们提供的功能种类的限制。

最后,如果您的依赖项 X 的次要版本不匹配(请查看 https://semver.org/ 了解更多信息),例如 1.2.0 和 1.1.2,那么您可以像大多数库一样将 X 添加为 B 中的对等项, 次要版本是向后兼容的(这是规则),你应该在 A 中安装 1.2.0 来满足 B 更高版本的需求。在这种情况下,您甚至不需要捆绑 B,但您可以而且应该这样做。

但如果区别在于主要版本,则将 B 与它自己的 X 捆绑在一起。