重复的标识符“ LibraryManagedAttributes”


70

我有以下相同的问题:

React Typescript(2312,14):重复的标识符'LibraryManagedAttributes'

TypeScript错误:标识符'LibraryManagedAttributes'重复

但是我只是找不到任何解决方案。

我已经升级到最新的node / npm / yarn / typescript版本。还尝试降级。没有任何帮助。

yarn build --verbose
yarn run v1.9.4
$ react-scripts-ts build --verbose
Creating an optimized production build...
Starting type checking and linting service...
Using 1 worker with 2048MB memory limit
ts-loader: Using typescript@3.0.3 and C:\dev\project\frontend\tsconfig.prod.json
Warning: member-ordering - Bad member kind: public-before-private
Failed to compile.

C:/dev/project/frontend/node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
(2312,14): Duplicate identifier 'LibraryManagedAttributes'.


error Command failed with exit code 1.

--verbose 不知何故没有给我更多信息。

如我所见LibraryManagedAttributes,定义在:

  • node_modules/@types/react/index.d.ts
  • node_modules/@types/prop-types/node_modules/@types/react/index.d.ts
  • node_modules/@types/react-overlays/node_modules/@types/react/index.d.ts
  • ....

这是哪里来的?我该如何避免呢?

我想找出错误的出处,以便将其报告给正确的实体,但我不知道从哪里开始。

我还能尝试什么?


Yarn不应安装@types/react类似的多个副本。尝试删除您的yarn.lock文件,然后yarn install再次运行。如果没有帮助,尝试删除所有依赖package.json@types/react@types/prop-types以及@types/react-overlays看看你是否仍然得到问题。如果是这样,请在问题中添加package.jsonyarn.lock(最多不超过40行),以便我们可以了解为什么yarn正在执行其操作。
马特·麦卡钦

删除yarn.lock文件实际上有帮助。我仍然担心这种情况会在某天重复出现。我不确定这是如何产生的。可能与此问题有关:github.com/DefinitelyTyped/DefinitelyTyped/issues/28881
Spenhouet

1
如果任何人由于@ types / react-dom内部依赖性和@ types / react冲突而遇到问题,则可以尝试此答案,基本上可以一次卸载并重新安装它们。stackoverflow.com/a/54239498/4353782
Mayur Dhurpate

Answers:


115

这似乎是发生的,因为Yarn可以解析一个程序包的多个版本。@types/react在这种情况下。Yarn@types/react从您的package.json解析为的依赖项@types/react-dom

从我的package.json中获取以下片段:

"devDependencies": {
  "@types/react": "^15.0.16",
  "@types/react-dom": "^0.14.23"
  ...
}

运行后创建的yarn.lockyarn install包含类似于以下内容的东西:

"@types/react-dom@^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/react@*":
  version "16.4.14"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.14.tgz#47c604c8e46ed674bbdf4aabf82b34b9041c6a04"
  dependencies:
    "@types/prop-types" "*"
    csstype "^2.2.0"

"@types/react@^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

请注意,它@types/react-dom取决于@types/react所指示的任何版本"*"。Yarn解析以下两个版本@types/react"16.4.14""15.6.19"。这会导致您提到的类型冲突。

解决方案是在您的package.json中添加一个resolutions字段,以告诉Yarn解析特定版本的。采取以下示例:@types/react

"resolutions": {
  "@types/react": "^15.0.16"
}

yarn install再次运行。请注意yarn.lock文件中的更改:

"@types/react-dom@^0.14.23":
  version "0.14.23"
  resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-0.14.23.tgz#cecfcfad754b4c2765fe5d29b81b301889ad6c2e"
  dependencies:
    "@types/react" "*"

"@types/react@*", "@types/react@^15.0.16":
  version "15.6.19"
  resolved "https://registry.yarnpkg.com/@types/react/-/react-15.6.19.tgz#a5de18afe65b0f29767328836b48c498a5d3a91b"

现在,Yarn可以"15.6.19""@types/react@*""@types/react@^15.0.16"依赖项解析相同的版本。

我想知道为什么需要这样做。我希望Yarn能够理解它可以解决依赖关系"@types/react" "*""@types/react@^15.0.16"而不是使用最新版本的来解决它@types/react


我遇到了同样的问题,这个答案使我更接近解决方案。但是,我还必须先删除该node_modules文件夹yarn install,否则yarn install将无法对更改进行足够的处理package.json。(我相应地编辑了答案,以防止其他读者遇到该问题,但奇怪的是,该问题被同行拒绝了。)
CarstenFührmann18年

4
锁定文件更新后,是否可以安全删除该resolutions字段?
哈里

是的,一旦创建了新的锁定文件,就可以安全地删除分辨率配置。
JMadelaine '20

@sander schutten谢谢,我为React团队创建了一个错误报告github.com/facebook/react/issues/20005
Tomasz Smykowski

您可以yarn why @types/react用来获取这些不同版本来自何处的附加信息。就我而言,我有一个17.x和16.x版本,后者来自我实际上没有使用的依赖项,因此我可以将其删除。
Jeroen Vannevel

36

这似乎是打字稿问题。

我目前的解决方法是添加"skipLibCheck": truetsconfig.json

我想强调的是,这只是解决方法,而不是针对自身问题的解决方案。


这个解决了吗 我只是尝试创建和应用并收到此错误。
MickB

11
请注意,添加"skipLibCheck": true到tsconfig是对代码库的类型安全性的潜在破坏性操作,并且很难撤消。
CNP

这应该是答案
HalfWebDev

保存我的一天,启用skipLibCheck对我有用,对我来说,它仅在我的本地环境中不起作用,因此启用skipLibCheck标志对我来说应该很好
Raj

15

对我来说,我不得不作出反应,重复的类型react-reduxreact以及react-intl当我升级react-intl。到目前为止,对我来说最有效的侵入性修复程序是运行以下命令:

npx yarn-deduplicate --packages @types/react yarn.lock

如果锁文件的结果差异正确,请继续删除node_modules,然后yarn从重复数据删除的锁文件中获取新软件包。


1
谢谢你 这立即解决了问题。应该标记为答案
karrde00 '19

14

我遇到了同样的错误。我设法通过删除“ @ types / react”并再次安装来解决此问题。

yarn remove @types/react
yarn add --dev @types/react

6

对我而言,最简单的解决方法是删除我的node_modules目录和yarn.lock / package-lock文件,然后执行yarn安装来重新安装所有节点模块。


2

我也有同样的问题yarn upgrade @types/react-router-domgit diff显示已@types/react解决的多个版本。就我而言,yarn upgrade @types/react可以解决问题。删除yarn.lock应该会有所帮助。

似乎全新的yarn.lock安装(没有安装)将使软件包解析为一致的状态,但是部分升级不会全局解析依赖项。因此,可能需要进行手动调整才能升级所有涉及的软件包。


2
去除yarn.lock是关键。仅删除node_modules并安装无济于事。
oyalhi

1
yarn upgrade @types/react为我解决了这个问题。我不需要删除yarn.lock文件
-Zander

2

与该问题相关的是,npm list @types/react从package.json目录运行,应列出在项目中找到的重复类型定义。


2

就我们而言,我们通过

  1. 将所有@types/*包移至devDependencies

  2. rm -rf yarn.lockrm -rf node_modules

  3. 再跑yarn install一次


1
C:/Users/japa/source/repos/ReactTestApp/TemplateExample/ClientApp/node_modules/@types/react/index.d.ts
TypeScript error in C:/Users/japa/source/repos/ReactTestApp/TemplateExample/ClientApp/node_modules/@types/react/index.d.ts(2835,14):
Duplicate identifier 'LibraryManagedAttributes'.  TS2300

就我而言,我需要手动解决问题(使用TS2300中描述的原理)。一旦将ReactKendo添加到我的项目中,问题就出现了。

  1. 又到ClientApp目录在我的项目ClientApp\node_modules\@types
  2. 备份react目录,然后将其删除
  3. 清理+构建+运行项目,并且不再发生上述错误
  4. react错误消失后我恢复了文件夹,错误似乎永远消失了,因此在我看来,这就像是宇宙中某个地方的典型魔术错误:-)

我不需要更改配置文件中的其他任何内容。


1

使用重复重复的纱线为我解决了这个问题。

脚步:

  1. 可选的安装yarn-deduplicate软件包或npx在第二步中使用
npm install -g yarn-deduplicate

要么

yarn global add yarn-deduplicate
  1. yarn-deduplicate
yarn-deduplicate yarn.lock --packages @types/react yarn.lock

要么

npx yarn-deduplicate --packages @types/react yarn.lock
  1. 移除资料node_modules
rm -rf node_modules
  1. 重新安装依赖项
yarn install

0

在我的情况下,我收到错误消息,指出在两个不同的位置声明了“ LibraryManagedAttributes”。遵循这些路径,我意识到已安装的模块还具有package.json文件,该文件也将“ @ types / react”添加为dep,并且其版本与根package.json文件中的版本不同。我将这两个更改为相同的版本,问题已解决。


这是一个旧的答案,但是鉴于它在“活动”下对我来说排名最高,我认为它值得一提:您永远不要修改依赖项的package.json文件。一旦您重新安装节点模块,或从源代码构建另一个开发人员,您的更改将不会传播,并且您会遇到麻烦。
sean.hudson

0

我在我使用的另一个模块中对版本请求有冲突。修复该问题并重新安装yarn也对我没有帮助。

但是使用NPM代替Yarn为我解决了。

希望这对某人有帮助。


0

什么工作对我来说是删除react@types/reactpackage.json,然后在zsh中:

rm -rf node_modules/**/react
npm i react @types/react

0

对我来说,它仅由引用引起@types/react-redux。由固定npm i --save-dev @types/react,所以package.json看起来像这样:

  ...
  "devDependencies": {
    "@types/react": "^16.9.19",
    "@types/react-redux": "^7.1.7"
    ...
  }

0

使用链接依赖项时遇到了这个问题。我的链接包位于lerna回购中,它具有@types/reactdevDependency。我添加@types/react为peerDependency,将工作流切换为yalc,并且能够继续。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.