我在nx中使用了一个monorepo,它的结构如下:
apps
| - my-app
libs
| - common
| - my-client在以@my-org/my-client和@my-org/common的名称部署之后,将在npm上发布lib,而我正在定义以下路径别名(在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-app时,它似乎是在获取对等依赖@my-org/common (来自another-external-package),而不是从定义在tsconfig.conf上的别名。这种情况只发生在我们为生产而构建时,而不是在dev环境中。
对于如何告诉nx/tsc选择库而不是已发布的软件包,有什么想法吗?
发布于 2022-08-17 07:35:33
我认为您可以使用包覆盖。
尝试将其添加到您的package.json文件中:(不确定我是否正确地将它放在您的情况下)
"overrides": {
"@my-org/my-client": {
"@my-org/common": "$@my-org/common"
}
}在这里解释:https://docs.npmjs.com/cli/v8/configuring-npm/package-json#overrides
如果需要对依赖项的依赖项进行特定更改,例如用已知的安全问题替换依赖项的版本,用叉替换现有的依赖项,或者确保在任何地方都使用相同版本的包,则可以添加覆盖。
重写提供了一种方法,可以将依赖树中的包替换为另一个版本,或者完全替换另一个包。这些更改的范围可以是特定的,也可以是所需的模糊的。
发布于 2022-08-18 00:53:00
通过将tsconfig.conf上标记的依赖项直接添加到package.json中,我找到了一个修复方法,如下所示:
"dependencies": {
"@my-org/common": "file:./libs/common"
}这使得my-app使用本地版本的@my-org/common,而不是使用通过@my-org/my-client解决的对等依赖。
正如@EcksDy所提到的:
tsconfig.paths中的别名仅用于您的IDE。解决方案发生在构建时,通过ts加载程序包,以防您使用webpack,这是默认的nx配置的应用程序。
@johey:这不是要覆盖在依赖项中调用的包,而是要求应用程序使用本地版本,而不是发布的版本:)
https://stackoverflow.com/questions/73186987
复制相似问题