首页 > 解决方案 > TS4090 错误:电子中节点的库冲突

问题描述

你好,

我正在用 typescript 开发一个电子应用程序,它在编译时出现以下错误消息(技术上有五个,但它们都是相同类型的错误,只是与不同的部分冲突)

node_modules/@types/body-parser/index.d.ts(12,23): error TS4090: Conflicting definitions for 'node' found at '.../node_modules/@types/node/index.d.ts' and './node_modules/electron/node_modules/@types/node/index.d.ts'. Consider installing a specific version of this library to resolve the conflict.

所以这意味着我有两个用于“节点”的类型库 - 但是,我的 package.json 中没有包含 @types/node 库(因为它显然默认存在于电子中)。因此,我对如何解决这个问题感到完全困惑和迷失。

我尝试删除 node_modules 和 yarn.lock 并从头开始重建模块,删除 @types/node 或 electron/.../@types/node,甚至删除这些引用的所有代码并逐渐重建它们。没有工作。我也尝试使用这里提到的解决方案:https ://github.com/electron/electron/issues/10167但无济于事。

在错误消息中写着“考虑安装此库的特定版本以解决冲突” - 我该怎么做?

希望有足够的信息继续下去,

干杯

标签: typescriptelectron

解决方案


我已经设法解决了我的错误,尽管它是通过回避它而不是真正理解和解决潜在问题。我怀疑对于相当复杂的 UI 技术堆栈和电子堆栈都有一个 node_modules 文件。

因此,我将这两个分成两个单独的子项目,这些子项目正在编译中,并以这种方式组合在一起。值得注意的是,为了在 UI 项目中启用电子模块,我必须通过将此元素添加到 plugins 数组来手动将其添加到 webpack.config.js 文件中

new webpack.ExternalsPlugin('commonjs', [
    'electron',
    'ipc',
    'ipc-renderer'
  ]),

所以总而言之,我不再有错误,尽管我本身并没有解决它。我简要描述了我是如何管理它的,希望其他遇到相同错误的人可能会因此得到帮助。

干杯


推荐阅读