问题标签 [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 投票
1 回答
640 浏览

vue.js - npm 错误!如何使用 vue@2.6.14 安装满足对等依赖的编译器-sfc?

我的包JSON

当我检查npm list vue

如何安装compiler-sfc满足对等依赖项vue@2.6.14?我不想将 vue 更新到 3。

0 投票
1 回答
306 浏览

npm - Npm 在定义对等依赖时包括所有预发布范围

我正在维护一个package-A依赖另一个 NPM 包(package-B)来运行的 NPM 包(可以说它)。因此,我需要将该包作为对等依赖项添加到 中package.json,以便 npm 和用户可以确保一切正确。

问题是,package-B使用预发布版本控制。我很清楚它使用了错误的 semver,但我还无法更改公司政策。同时会强制使用正确的版本控制。语义是这样的:

  • 1.0.1-alpha.X -> 用于测试和前沿内容的不稳定版本
  • 1.0.1-beta.X -> 对于每个看似稳定的版本(如 rc)
  • 1.0.2 -> 当包准备好生产时。

所以基本上,当有另一个生产版本时,补丁版本会增加。

案例:由于版本控制,我需要将除主要包之外的每个包都包含为对等依赖项,以及预发布版本。

需求基本上是所有东西,包括碰巧与对等依赖一样重要的^1.0.0预发布1

  • ^1.0.0-> 不包括预发布
  • ^1.0.0 || >=1.0.0-beta.X-> 不包括例如1.0.1-beta.1
  • *-> 不包括预发布
  • ^1.0.0 || >=1.X.X-beta.X-> 不工作。

在 semver 上,有一个名为的参数--include-prerelease,我认为它可以满足我的需要,显然特定于 semver 命令。

reactNPM 上的包具有类似的版本控制系统,并正确使用了预发布。例如,它16.0.016.0.0-alpha.116.6.0-alpha.0。我基本上需要将所有这些都包含在一个范围内。

免责声明:当发生重大更改时,会更改次要版本。再一次,我很清楚这个版本控制不符合 semver 规定,不幸的是,建议它不会解决手头的问题。

0 投票
1 回答
44 浏览

typescript - 是否可以为不同版本的 TypeScript 使用不同的声明文件?

我有一些类型定义想要转换为 npm 包,因为我在多个不相关的项目中使用它们。(我可能会称它为@dfoverdx/ts-magic.)其中一些项目使用 3.x,一些使用 >=4.2,其中引入了元组类型中的前导和中间剩余元素。

是否可以编写多个仅使用在用户版本的 TypeScript 中工作的类型的声明文件?

我能想到的有四种方法可能会奏效,但我对实施的了解还不够,如果它们可能的话。

  1. 使用 中的libtsconfig.json,用户可以指定要包含的 ts-magic 声明文件。然后每个声明文件可以使用三斜杠指令来引用以前版本的声明文件。

  2. 我可以有多个依赖于以前的子包的子包。我宁愿不走这条路,特别是因为在 NPM 中没有嵌套作用域之类的东西,而且我不想使用与我的 GitHub 用户名不同的作用域,也不想在@dfoverdx作用域下维护多个单独的包.

    因此我们遇到了另一个问题:这些类型中的一些强类型全局对象方法,例如 Object.fromEntries(),以及在declare global {}环境上下文中声明的东西——据我所知——不能限于包含它是在声明文件中声明的。也就是说,如果我的项目的 index.ts 被导入@dfoverdx/ts-magic/3.8,因为我正在导入@dfoverdx/ts-magic,它将包含包的每个声明文件。

  3. package.json使用中的一些魔法peerDependencies或我不知道的其他属性。

  4. 某种三斜杠指令。我怀疑这不是办法

我无法想象这不是以某种方式做到这一点的方法。想法正确吗?

0 投票
3 回答
313 浏览

reactjs - 如何使可选的对等依赖项真正可选

我有一个 NPM 包,它提供了两件事:React hooks 形式的核心功能和使用这些核心功能的 UI 组件。

我最初的想法是制作两个包,一个用于核心内容,一个用于组件。因此,如果您不想使用开箱即用的组件,您仍然可以使用库的核心功能。在研究了这个库之后,我发现制作两个包有点过头了,因为核心功能基本上是 2 个 Hooks,不到 200 行代码。

因此,我将 UI 组件依赖项添加为对等依赖项,并期望当我将它们标记为可选时,如果您不需要 UI 部分,则不需要安装它们。将它们标记为可选我的意思是:

现在的问题是,即使我没有将 UI 部分从我的库导入到我设置的测试项目中,应用程序也会中断,因为它正在尝试寻找可选的依赖项。

我的问题:

  • 这是预期的行为吗?
  • 如果应用程序在我的库所依赖的模块不存在时中断,那么这些对等依赖项有什么可选的?
  • 除了为组件制作单独的包装之外,我没有其他选择吗?

希望有人能为我照亮黑暗。

0 投票
2 回答
1048 浏览

reactjs - 是否可以将 Material UI 作为 peerDependency 但将其类型保持为 DevDependency?

是否可以将 Material UI 作为 peerDependency 但将其类型保持为 DevDependency?

我正在使用 React + Typescript 构建一个组件库,这些组件基于 Material UI 库,其中 Rollup 作为模块捆绑器。

这是我的IInputProps类型扩展 Material UITextFieldProps类型的示例。

我的目标是将 Material UI 包设置为 peerDependency,因此它将使用安装在目标项目上的 material-ui 包。我将 Material UI 作为 peerDependency 插入并rollup使用peerDepsExternal插件进行设置。当我尝试构建包时,它会引发以下错误:

Cannot find module '@material-ui/core' or its corresponding type declarations.

原因与这个答案有关(@material-ui/core 和 @types/material-ui 有什么关系?)。Material-UI 包包含它自己的类型定义 ( *.d.ts files),因此当我将其设置为 peerDependency 时,类型/接口丢失了。为了解决这个问题,我遵循了这个解决方案(https://github.com/ezolenko/rollup-plugin-typescript2/issues/198)在 src/@types/material-ui/index.d.ts 文件中声明每个模块,但它引发了另一个问题:我不能再使用 material-ui 类型/接口了。

@material-ui/core我的src/@types/material-ui/index.d.ts文件中声明后,代码在下面指出了这个错误。

Cannot use namespace 'TextFieldProps' as a type.ts(2709)

Exported type alias 'IInputProps' has or is using private name 'TextFieldProps'.ts(4081)

现在,我只能看到这两个解决方案:

  1. 将整个材料 ui 包保存在我的库中并丢失包大小:
  1. 将 Material UI 用作 peerDependency,但会丢失 Material UI 类型/接口和 lint(通过向我的类型/接口添加一个接受任何道具的属性 -允许其他属性的 TypeScript 接口)。

所以,我想知道是否有任何方法可以将 Material UI 作为 peerDependency 但将其类型保留为 devDependencies,所以我可以将它与 Material UI 捆绑为 peerDependency 并在我的包中使用它的类型?

我的配置如下:

src/@types/material-ui/index.d.ts

rollup.config.js

tsconfig.json

包.json

0 投票
1 回答
199 浏览

npm - 忽略 package.json 中单个包的对等依赖检查

我尝试从 NPM 7 的对等依赖检查中排除react-virtualized包。我知道我可以单独安装该包

npm install react-virtualized --legacy-peer-deps

...但我的目标是使用 npm install 安装所有软件包,并且不应检查对等依赖项。那可能吗?

我会接受任何向我展示如何操作 package.json 的答案,以便新的npm install运行而不会出现对等依赖错误。我有以下 package.json:

0 投票
1 回答
57 浏览

npm - 如何确定是否应将 deps 放入“devDependencies”或“peerDependencies”

当您有一个要安装到当前项目或 NPM 包中的依赖项时,很容易确定它是“deps”还是“devDeps”,但是如何确定它是“deps”还是“ peerDeps'?

0 投票
0 回答
17 浏览

npm - 为多个助手和不同对等依赖项设计 npm 包

我计划构建一个包含一些指令的 npm 包,其中一些需要 Angular Material 作为对等依赖项,我应该

  • 发布单个包,或
  • 发布 1 个包包含所有(如果用户不使用/导入相关模块,他们可以选择不安装对等依赖项)?
0 投票
0 回答
162 浏览

node.js - 这里有什么问题我必须在“react”上做 NPM 链接:“^16.13.1”因为应用程序报告重复 React

它始于此错误:

在此处输入图像描述

所以我做了一个测试以排除问题所在。我测试了我从 GitHub 分叉的库Notistack,然后用npm 链接链接到我的应用程序是否是问题所在。

我将此代码放在应用程序中

我把这段代码放在了分叉的 Notistack

当我运行该应用程序时,我可以在控制台中看到我false从该测试中获得了一个。表明我有两个不同的 React 版本并导致错误。

如果我现在在库中为 React 包做 npm 链接,那么 Notistack 正在使用应用程序的 React 版本。然后我摆脱了这个错误。

我在这里缺少什么,为什么即使我peerDependencies用于 React 也必须这样做。

包.json

0 投票
0 回答
28 浏览

node.js - 如何使用 npm V6 优雅地安装 peerDepencies?

我正在monorepo使用 lerna 开发一个项目,旨在构建像 Svelte、React.js 和 Vue.js 这样的库或组件。

最佳实践是我们应该在 package.json中创建 peerDependencies react,但在开发模式下我需要调试代码,这意味着我需要安装所有依赖项,包括对等依赖项。react-domvue

那么除了安装peerDependencies还有什么优雅的方法npm-install-peers吗?并且preinstall不够优雅,因为它会在其他人使用我的组件时运行。