问题标签 [peer-dependencies]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
35 浏览

npm - 确保 NPM 开发依赖项匹配相应的对等依赖项

我几乎总是最终将我的 NPM 模块对等依赖项添加到开发依赖项中,因为我需要安装对等依赖项,这样我就可以在构建包之前运行自动化测试。这会产生一个问题,即我可能会不小心为peerdev使用不同的版本号。我觉得奇怪的是npmyarnnpm install在我运行或yarn命令时不会自动安装对等依赖项。在某些情况下,我发现yarn甚至试图阻止我添加与peerdev相同的依赖项依赖。我认为我做错了什么,但我无法弄清楚预期的工作流程。有人可以向我解释这应该如何工作吗?

0 投票
1 回答
231 浏览

reactjs - react-helmet-async 包的 npm 对等依赖项使用 React 17 时出错

对于使用 create-react-app 引导的 React 17 项目,我想使用该react-helmet-async包。该项目具有以下对等依赖项,位于package.json文件中:

尝试安装软件包时,出现以下错误:

据我了解,react-helmet-async对于使用此包的项目,该包需要 React ^16.6.0。我可以使用该--force选项来消除错误,但是当我尝试执行此操作时,npm update它会不断重复。

我尝试在我的 中添加分辨率package.json,试图强制包使用我正在使用的 React 版本。在运行npm installor之前npm update,我运行了npx npm-force-resolutions.

不幸的是,这没有奏效。有没有办法在不降级到 React 16 的情况下仍然使用这个包而不会在我的控制台中收到错误?另外,我是否误解了对等依赖关系?

0 投票
0 回答
544 浏览

dependencies - Yarn 工作区共享依赖项

我正在尝试构建一个使用纱线工作区的项目。
这就是我想在我的设置中完成的事情:

我在我的根目录中安装了 graphql,package.json因为graphql-codegen需要它在那里(否则它会给我一个未满足的依赖警告墙!)。

AFAIK,如果我想在多个工作区中安装相同的依赖项,我需要在里面指定它peerDependency,所以我做到了。我尝试graphql在 server 内进行对等安装package.json,但随后 yarn 在下面给了我这个警告并改为安装graphqldependencies

我错过了什么吗?

0 投票
0 回答
653 浏览

reactjs - “多个 React 副本” - 无法将组件库与 Rollup 捆绑在一起

当我尝试在我的主机应用程序中使用本地 React 组件库(与汇总捆绑)时,我遇到了可怕的“您可能在同一个应用程序中拥有多个 React 副本”错误(注意:这只发生在我使用钩子时)。如果'react'和'react-dom'包含在devDependencies中(测试/故事书所必需),似乎几乎不可能不将'react'和'react-dom'捆绑到我的库中,尽管它列在我的package.json的peerDependencies和我的外部rollup.config.js(并且,要清楚,它不在“依赖项”下)。

我在网上看到许多解决方案建议将库链接到主机应用程序中的 React 副本(无论是通过别名还是直接从主机应用程序的 node_modules 文件夹解析模块),但这对我不起作用,因为库是在不同的应用程序中使用。它需要捆绑为 peerDependency,在我看来,这不应该这么困难。我们之前使用 webpack 将库中的代码直接捆绑到那些应用程序中,但认为如果我们将其外部化到单独的模块中会更容易维护。

无论如何,这是我的配置。请大神告诉我我做错了什么。

节点v12.16.3 NPM 6.14.4

(包括因为据我了解,npm@7 会自动捆绑 peerDependencies,但更新生产会很麻烦,而且我认为这对于我正在尝试做的事情没有必要)

rollup.config.js

包.json

0 投票
0 回答
32 浏览

npm - npm 列表给出错误的 UNMET PEER DEPENDENCY

我运行了命令 npm install react-native-safe-area-context@3.1.9并得到了结果

然后我运行命令npm list react-native-safe-area-context并得到以下结果

react-native-safe-area-context@3.1.9当我刚安装它时,未满足的对等依赖关系如何?

0 投票
1 回答
61 浏览

javascript - 如何正确重用 NPM 的子依赖项?

这个问题主要基于react-admin,因此是标签,但它可能在其他情况下也很有用。

所以我们有react-admin哪个取决于@material-ui/core. 这允许我在自己的代码中使用 Material UI,同时实现 UI,而不依赖于@material-ui/core我自己。但是,我不能做的是使用来自 IDE(VSCode / Emacs + LSP)的任何帮助,例如我不能从@material-ui/core.

我认为这种行为是正确且符合预期的,因为@material-ui/core它不是我的项目的依赖项。但是,我仍然可以使用这种依赖,所以我希望我的工具知道这一点。将其添加为我自己的依赖项相当难看,因为我必须保持版本与react-admin's 同步,这可能很麻烦,并且有点破坏了依赖项管理的全部意义。我尝试添加@material-ui/core我的 peerDependencies,这似乎有点倒退,但令人惊讶的是,它对 VSCode 和 LSP 都有效。

所以问题是:在不向我的项目中添加一堆不需要的依赖项的情况下,重用子依赖项的正确方法是什么?

0 投票
1 回答
153 浏览

webpack - Webpack 外部可选模块

我正在研究一个需要一些可选对等依赖项的库。

我认为我可能需要它们的方式是

我将它们声明为外部对象,如下所示:

现在,这可行,但如果强制消费者安装依赖项,否则他们将收到一条compiled with warnings Module not found: Error: Can't resolve 'react-dnd' 消息

我如何告诉 webpack 不在乎模块是否不存在?

我发现一种方法是使用,但在这里__non_webpack_require__阅读答案后我感到气馁

0 投票
1 回答
31 浏览

reactjs - 多个 Peer React 版本 npm

我正在开发一个反应应用程序。目前我已经安装了 react@17.0.0 并且我有一些插件需要这个版本的 react。现在我也想使用 react-canvas,它需要 react@15.0.0。

安装 react-canvas 后的警告如下:npm WARN react-canvas@1.3.0 requires a peer of react@^15.0.0 but none is installed。您必须自己安装对等依赖项。

是否可以定义多个反应版本或类似的东西?因为我不能降级反应,因为其他插件和画布只运行反应版本 15。

0 投票
1 回答
128 浏览

reactjs - 在 react-typescript 库中考虑多个对等依赖版本

我正在将我的反应组件库react-esri-leaflet转换为打字稿。该库要求用户安装 react-leaflet 作为 peerDependency,它提供对 react-leaflet 版本 3 (RLV3) 和 react-leaflet 版本 2 (RLV2) 的支持。对于默认组件,我可以简单地做

但是如果用户想要使用与 RLV2 兼容的组件,他们可以单独导入这些组件(请随意查看库文档以了解如何使用)。大多数 RLV2 组件都以类似的开头

在转换为打字稿时,这会引发错误。在开发这个库时,我安装的 react-leaflet 安装了最新版本。withLeaflet并且MapControl不再存在于该版本中。

为了解决这个问题,我遵循了“Node 应用程序中相同 npm 包的两个版本”的答案中的建议。这使我可以通过将 RLV2 别名为 来将 RLV2 视为源代码中的一个单独的包,'react-leaflet-v2'我可以这样做

太好了,现在打字稿很高兴,我可以将适当版本的 react-leaflet 导入适当的组件,并且打字是正确的。但是,当我使用 编译回 js 时tsc,我的 V2 组件中使用的包名称仍然是'react-leaflet-v2'.

问题是该库的最终用户将使用RLV2或 RLV3,并且将'react-leaflet'在他们的项目中简单地调用它。库的编译文件需要能够找到'react-leaflet',而不是某个别名,无论它们使用的是什么版本。

如何在两个依赖版本的开发中保持类型安全,但让我的用户不用担心,这意味着只需安装他们想要使用的 react-leaflet 版本,从库中导入正确的组件,并拥有组件在他们的项目中找到'react-leaflet'依赖项?编译时是否可以告诉tsc重命名?还有其他解决方案吗?'react-leaflet-v2''react-leaflet'

0 投票
0 回答
106 浏览

angular - Angular 库需要 3rd 方包 - peerDependencies 未安装,我是否使用 whitelistedNonPeerDependencies 代替?

我使用 Angular 和 Angular CLI/ng-packagr 创建了一个简单的组件库。我能够在其他 Angular 应用程序中构建、打包、分发和安装这个组件库。但是我还有一个问题。我的组件库使用 Roboto 和 Material Design 图标,我在组件库中列出了这些package.json,两个包都在我的peerDependencies和中列出devDependencies。这看起来像这样(为了便于阅读,我没有在我的 中包含所有包devDependencies

将组件库安装到新应用程序时,我使用 npm 安装包,然后将 Roboto 和 Material Design CSS 文件路径传输到新应用程序的 angular.json 文件中的样式属性中。可悲的是,这给出了一个错误:

发生未处理的异常:ENOENT:没有这样的文件或目录,lstat '/Users/user/demo/demo-app/node_modules/material-design-icons

这是因为在安装我的包(组件库)时没有安装第 3 方包。我读到 Node 不再支持安装peerDependencies. 我或任何使用我的库的人都必须手动将它们导入到他们的应用程序中。这不是很好,我可以看到人们忘记这样做或不知道他们必须这样做。然后,我阅读whitelistedNonPeerDependencies并阅读到将其包含在我的组件库的 package.json 中将确保安装所需的包,但这可能会导致包重复。我对这些东西很陌生,有人可以告诉我一个合适的或最佳实践,以确保在将我的组件库安装到新应用程序时安装我的组件库的 3rd 方包依赖项。

非常感谢 - 如果我对这个问题的措辞很糟糕,请添加评论,我会重构。