[英]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.