【问题标题】:A peerDependency is overriding a NX LibrarypeerDependency 覆盖 NX 库
【发布时间】:2022-08-17 15:35:33
【问题描述】:

我正在使用带有 nx 的 monorepo,其结构如下:

apps
  | - my-app
libs
  | - common
  | - my-client

这些库在部署后以@my-org/my-client 和@my-org/common 的名称在npm 上发布,而我正在定义以下路径别名(在tsconfig.conf 上)以直接在my-app 代码上使用它们:

\"paths\": {
      \"@my-org/my-client\": [\"libs/my-client/src/index.ts\"],
      \"@my-org/common\": [\"libs/common/src/index.ts\"]
}

问题是my-app 正在使用依赖于@my-org/common 的外部包another-external-package(它正在使用其发布的版本导入)。

当我在my-app 上导入@my-org/common 时,似乎它正在获取对等依赖项@my-org/common(来自another-external-package),而不是来自tsconfig.conf 上定义的别名。 这只发生在我们为生产而构建而不是在开发环境中时。

关于如何告诉 nx/tsc 选择库而不是已发布包的任何想法?

  • 这似乎是包管理器(npm/yarn)或 webpack 问题。 tsconfig.paths 中的别名仅适用于您的 IDE,在构建时通过 ts-loader 包进行解析,以防您使用 webpack,这是应用程序的默认 nx 配置。我对 webpack 不够熟悉,但我会寻找一种方法来提示它在构建时采用正确的包。

标签: typescript npm nestjs nrwl-nx nrwl


【解决方案1】:

我认为你可以使用包覆盖.

尝试将其添加到您的 package.json 文件中: (不确定我是否根据您的情况正确放置)

  "overrides": {
    "@my-org/my-client": {
      "@my-org/common": "$@my-org/common"
    }
  }

这里有解释:https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides

如果您需要对您的依赖项进行特定更改 依赖项,例如将依赖项的版本替换为 已知的安全问题,用 fork 替换现有依赖项,或 确保在任何地方都使用相同版本的包, 那么你可以添加一个覆盖。

覆盖提供了一种替换依赖树中的包的方法 使用另一个版本,或完全使用另一个包。这些变化可以 可以根据需要确定具体或模糊的范围。

【讨论】:

    猜你喜欢
    • 2020-06-12
    • 2021-08-22
    • 2013-09-07
    • 1970-01-01
    • 2018-04-12
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多