我有一个可以构建和运行的 TypeScript 项目,但我有大量构建错误,这些错误似乎都源于一个错误:
TS4090:(TS)在“C:/[projectpath]/node_modules/@types/node/index.d.ts”和“C:/[Microsoft 用户路径]/Typescript/3.1”中发现“node”定义冲突/node_modules/@types/node/index.d.ts'。考虑安装该库的特定版本来解决冲突。
我不明白有关“安装此库的特定版本”的内容。我不确定为什么一开始会发现两个版本。
我的应用程序有一个
tsconfig.json
文件位于 ClientApp
文件夹中。它包含以下内容:
{
"compileOnSave": false,
"compilerOptions": {
"module": "esnext",
"skipLibCheck": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true,
"target": "es2015",
"lib": [
"es2016",
"es2017",
"dom"
],
"moduleResolution": "node",
"allowJs": true,
"baseUrl": "src"
},
"include": [
"./src/**/*.ts",
"./test/**/*.ts",
"./custom_typings/**/*.d.ts"
],
"atom": {
"rewriteTsconfig": false
},
"typeAcquisition": {"enable": false}
}
我最近根据与此相关的其他帖子的评论添加了
typeAcquisition
——但没有任何影响。
我需要做什么才能“安装此库的特定版本”?
环境
该项目的目标是.NetCore 2.2。该项目包含提供后端数据的 WebAPI 控制器以及包含使用 Aurelia 创建的 SPA UI 的 ClientApp 文件夹。我使用 WebPack 构建 SPA 应用程序。
错误
我通过移动解决了这个问题
"@types/node": "^10.11.6"
从
devDependencies
到我的 peerDependencies
文件中的 package.json
"peerDependencies": {
"@types/node": "^10.11.6"
},
对我来说,我通过编译器选项(tsconfig.json)中的change/add“typeRoots”修复了它
"compilerOptions": {
....
"typeRoots": [
"node_modules/@types"
]
....
}
对我来说,是
karma.config
文件导致了问题。
删除
package.json
中的一些类型后,我设法减少了错误数量,并且只有一个 - 在signalr
和karma
之间。
出于某种原因,我有一个
.js
,而不是 .ts
业力配置。它需要某种版本的 node,因为使用了
require
函数。tsconfig.json
文件中的任何操作都无法解决该问题,因为 TS 的 node 类型和 JS 的 node 类型之间存在冲突。
在我的例子中,包electron和node-opcua使用不同的@types/node版本,导致“TS4090:(TS)'node的定义冲突”错误。
我已经通过在我的
peerDependency中手动提供
@types/node
的版本成功修复了该错误,正如错误中指出的那样,但是在其他地方安装项目后,此版本发生了变化,结果证明这是一个坏主意。所以我在我的 package.json中添加了
npm dedupe
作为 posinstall
脚本,并且它工作正常。如果您在 2 个不同的文件中导入 mongoose,请确保使用相同的导入,例如。使用
const mongoose = require("mongoose");
在两个文件中
解决了这个问题
rm -rf node_modules
rm package-lock.json
npm i