我有同样的问题:
React typescript (2312,14): Duplicate identifier 'LibraryManagedAttributes'
和
TypeScript error: Duplicate identifier '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 [email protected] 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
在这个特殊情况下。纱线从你的package.json中解析@types/react
,并作为@types/react-dom
的依赖。
从我的package.json中获取以下代码段:
"devDependencies": {
"@types/react": "^15.0.16",
"@types/react-dom": "^0.14.23"
...
}
运行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@*":
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
指示的任何版本的"*"
。纱线解决了两个版本的@types/react
:"16.4.14"
和"15.6.19"
。这会导致您提到的类型冲突。
解决方案是在你的package.json中添加一个resolutions field,告诉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
来解析它。
这似乎是打字稿问题。
我目前的解决方法是将"skipLibCheck": true
添加到tsconfig.json
。
我想强调,这只是一种解决方法,而不是解决问题。
解决这个问题的最简单方法是删除我的node_modules目录和yarn.lock / package-lock文件,然后进行yarn安装以重新安装所有节点模块。
我在yarn upgrade @types/react-router-dom
之后有同样的问题。 git diff
显示@types/react
已解决的多个版本。就我而言,yarn upgrade @types/react
解决了这个问题。删除yarn.lock
应该有所帮助。
似乎一个新的(没有yarn.lock
)安装会将软件包解析为一致状态,但部分升级不会全局解析依赖关系。因此,可能需要手动调整以升级所有涉及的包。
我得到了同样的错误。我设法通过删除我的'@ types / react'然后再次安装它来修复它。
yarn remove @types/react
yarn add @types/react
对我来说,当我升级react-redux
时,我在react
,react-intl
和react-intl
中有重复的反应类型。迄今为止对我有用的最少侵入性修复就是运行:
npx yarn-deduplicate --packages @types/react yarn.lock
如果锁定文件的结果差异看起来正确,请继续删除node_modules
,然后删除yarn
以从重复数据删除的锁定文件中获取新包。
在我的情况下,我得到错误表明'LibraryManagedAttributes'在两个不同的位置声明。按照路径,我意识到一个已安装的模块也有一个package.json文件,它还将“@ types / react”添加为dep,其版本与root package.json文件中的版本不同。我将这两个改为同一版本,问题解决了。