解决VS 2017中的“节点冲突定义” TS4090错误

时间:2019-06-20 16:49:32

标签: typescript visual-studio-2017 aurelia

我有一个构建并运行的TypeScript项目,但是我有很多构建错误,这些错误似乎都源于一个错误:

  

TS4090:(TS)在“ C:/ [项目路径] /node_modules/@types/node/index.d.ts”和“ C:/ [Microsoft的用户路径] / Typescript”中找到的“节点”定义冲突/3.1/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应用程序。

错误

enter image description here

4 个答案:

答案 0 :(得分:1)

我通过移动解决了这个问题

"@types/node": "^10.11.6"

devDependencies文件中的peerDependenciespackage.json

"peerDependencies": {
    "@types/node": "^10.11.6"
  },

答案 1 :(得分:1)

对我来说,我通过在 compilerOptions (tsconfig.json) 中更改/添加“typeRoots”来修复它

"compilerOptions": {
        ....
         "typeRoots": [
            "node_modules/@types"
        ]
        ....
}

答案 2 :(得分:0)

@RHarris看起来确实有些奇怪。 :D

我创建这个答案是因为我想分享gif,但评论不会让我失望。

您会在au run期间注意到其中的内容。它所做的第一件事是跟踪。这也适用于“ au build”。

enter image description here

@RHarris抱歉。我从来没有尝试过在VS中构建,始终是VSCode。我没有意识到显然有多痛苦。

我认为可以找到您的解决方案here

在标题为“设置webpack TypeScript加载”的部分中,他们在扩展的帮助下和“清理”中给出了一些有关设置VS以便使用Webpack进行构建的说明。 部分,其中显示了如何告诉VS停止使用tsc进行编译。

答案 3 :(得分:0)

对我来说,是 karma.config 文件导致了问题。

在我删除了 package.json 中的一些类型后,我设法减少了错误的数量,并且只有一个 - 在 signalrkarma 之间。

Screenshot of error

出于某种原因,我有一个 .js,而不是 .ts karma 配置。
在我切换到 correct configuration 并重新启动 VS 后,问题解决了。

它需要某个版本的 node,因为使用了 require 函数。
我的理论是,作为 JavaScript linting 功能的一部分,Visual Studio 会自动包含 node 可访问版本的类型。
但是,在它编译了 typescript 之后,包含了 node 类型的另一个版本 - 与已经存在的版本冲突。

tsconfig.json 文件中的所有操作都无法解决该问题,因为 TS 的 node 类型和 JS 的 node 类型之间存在冲突。