繁体   English   中英

peerDependency 覆盖 NX 库

[英]A peerDependency is overriding a NX Library

我正在使用带有 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的外部 package another-external-package (它正在与其发布的版本一起导入)。

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

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

我认为您可以使用package 覆盖

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

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

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

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

覆盖提供了一种将依赖关系树中的 package 替换为另一个版本或完全替换为另一个 package 的方法。 这些更改的范围可以根据需要具体或模糊。

我通过将 tsconfig.conf 上标记的依赖项直接添加到tsconfig.conf中找到了解决package.json ,如下所示:

"dependencies": {
    "@my-org/common": "file:./libs/common"
}

这使得my-app使用@my-org/common的本地版本,而不是使用通过@my-org/my-client解决的对等依赖项。

正如@EcksDy 提到的:

tsconfig.paths 中的别名仅适用于您的 IDE。 如果您使用的是 webpack(这是应用程序的默认 nx 配置),则在构建时通过 ts-loader package 进行解析。

@johey:这不是要覆盖在依赖项中调用的 package,而是要求应用程序使用本地版本,而不是发布的版本:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM