问题标签 [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.
vue.js - npm 错误!如何使用 vue@2.6.14 安装满足对等依赖的编译器-sfc?
我的包JSON
当我检查npm list vue
如何安装compiler-sfc
满足对等依赖项vue@2.6.14
?我不想将 vue 更新到 3。
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 命令。
react
NPM 上的包具有类似的版本控制系统,并正确使用了预发布。例如,它16.0.0
有16.0.0-alpha.1
和16.6.0-alpha.0
。我基本上需要将所有这些都包含在一个范围内。
免责声明:当发生重大更改时,会更改次要版本。再一次,我很清楚这个版本控制不符合 semver 规定,不幸的是,建议它不会解决手头的问题。
typescript - 是否可以为不同版本的 TypeScript 使用不同的声明文件?
我有一些类型定义想要转换为 npm 包,因为我在多个不相关的项目中使用它们。(我可能会称它为@dfoverdx/ts-magic
.)其中一些项目使用 3.x,一些使用 >=4.2,其中引入了元组类型中的前导和中间剩余元素。
是否可以编写多个仅使用在用户版本的 TypeScript 中工作的类型的声明文件?
我能想到的有四种方法可能会奏效,但我对实施的了解还不够,如果它们可能的话。
使用 中的
lib
值tsconfig.json
,用户可以指定要包含的 ts-magic 声明文件。然后每个声明文件可以使用三斜杠指令来引用以前版本的声明文件。我可以有多个依赖于以前的子包的子包。我宁愿不走这条路,特别是因为在 NPM 中没有嵌套作用域之类的东西,而且我不想使用与我的 GitHub 用户名不同的作用域,也不想在
@dfoverdx
作用域下维护多个单独的包.因此我们遇到了另一个问题:这些类型中的一些强类型全局对象方法,例如 Object.fromEntries(),以及在
declare global {}
环境上下文中声明的东西——据我所知——不能限于包含它是在声明文件中声明的。也就是说,如果我的项目的 index.ts 被导入@dfoverdx/ts-magic/3.8
,因为我正在导入@dfoverdx/ts-magic
,它将包含包的每个声明文件。package.json
使用中的一些魔法peerDependencies
或我不知道的其他属性。
我无法想象这不是以某种方式做到这一点的方法。想法正确吗?
reactjs - 如何使可选的对等依赖项真正可选
我有一个 NPM 包,它提供了两件事:React hooks 形式的核心功能和使用这些核心功能的 UI 组件。
我最初的想法是制作两个包,一个用于核心内容,一个用于组件。因此,如果您不想使用开箱即用的组件,您仍然可以使用库的核心功能。在研究了这个库之后,我发现制作两个包有点过头了,因为核心功能基本上是 2 个 Hooks,不到 200 行代码。
因此,我将 UI 组件依赖项添加为对等依赖项,并期望当我将它们标记为可选时,如果您不需要 UI 部分,则不需要安装它们。将它们标记为可选我的意思是:
现在的问题是,即使我没有将 UI 部分从我的库导入到我设置的测试项目中,应用程序也会中断,因为它正在尝试寻找可选的依赖项。
我的问题:
- 这是预期的行为吗?
- 如果应用程序在我的库所依赖的模块不存在时中断,那么这些对等依赖项有什么可选的?
- 除了为组件制作单独的包装之外,我没有其他选择吗?
希望有人能为我照亮黑暗。
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)
现在,我只能看到这两个解决方案:
- 将整个材料 ui 包保存在我的库中并丢失包大小:
- 将 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
npm - 忽略 package.json 中单个包的对等依赖检查
我尝试从 NPM 7 的对等依赖检查中排除react-virtualized包。我知道我可以单独安装该包
npm install react-virtualized --legacy-peer-deps
...但我的目标是使用 npm install 安装所有软件包,并且不应检查对等依赖项。那可能吗?
我会接受任何向我展示如何操作 package.json 的答案,以便新的npm install运行而不会出现对等依赖错误。我有以下 package.json:
npm - 如何确定是否应将 deps 放入“devDependencies”或“peerDependencies”
当您有一个要安装到当前项目或 NPM 包中的依赖项时,很容易确定它是“deps”还是“devDeps”,但是如何确定它是“deps”还是“ peerDeps'?
npm - 为多个助手和不同对等依赖项设计 npm 包
我计划构建一个包含一些指令的 npm 包,其中一些需要 Angular Material 作为对等依赖项,我应该
- 发布单个包,或
- 发布 1 个包包含所有(如果用户不使用/导入相关模块,他们可以选择不安装对等依赖项)?
node.js - 这里有什么问题我必须在“react”上做 NPM 链接:“^16.13.1”因为应用程序报告重复 React
它始于此错误:
所以我做了一个测试以排除问题所在。我测试了我从 GitHub 分叉的库Notistack,然后用npm 链接链接到我的应用程序是否是问题所在。
我将此代码放在应用程序中
我把这段代码放在了分叉的 Notistack
当我运行该应用程序时,我可以在控制台中看到我false
从该测试中获得了一个。表明我有两个不同的 React 版本并导致错误。
如果我现在在库中为 React 包做 npm 链接,那么 Notistack 正在使用应用程序的 React 版本。然后我摆脱了这个错误。
我在这里缺少什么,为什么即使我peerDependencies
用于 React 也必须这样做。
包.json
node.js - 如何使用 npm V6 优雅地安装 peerDepencies?
我正在monorepo
使用 lerna 开发一个项目,旨在构建像 Svelte、React.js 和 Vue.js 这样的库或组件。
最佳实践是我们应该在 package.json中创建 peerDependencies react
,但在开发模式下我需要调试代码,这意味着我需要安装所有依赖项,包括对等依赖项。react-dom
vue
那么除了安装peerDependencies还有什么优雅的方法npm-install-peers
吗?并且preinstall
不够优雅,因为它会在其他人使用我的组件时运行。