我编写了一个发布到我的应用程序使用的私有 npm 存储库的库。该库包含实用程序并依赖于其他库,例如让我们选择@aws-sdk/client-lambda
.
我的一些应用程序只使用了一些实用程序,不需要外部库的依赖项,而一些应用程序使用所有的实用程序。
为避免所有应用程序获得大量它们不需要的间接依赖项,我尝试将依赖项声明为peerDependencies
并让应用程序解析它们需要的依赖项。它可以很好地发布包,并从将所有声明为peerDependencies
自己的本地的应用程序使用它,但是当应用程序代码中导入库dependencies
的包含文件时,未能声明依赖项之一的应用程序会出现构建错误:.d.ts
error TS2307: Cannot find module '@aws-sdk/client-kms' or its corresponding type declarations.
是否有可能解决这种情况,以便我的库可以包含许多不同的实用程序,但应用程序可能会“挑选”它们在运行时满足这些实用程序要求所需的依赖项?我必须使用动态导入来执行此操作还是有其他方法?
我尝试@ts-ignore
在库代码中使用,它被传播到d.ts
应用程序导入的文件中,但没有帮助。
设置:
我的图书馆
包.json:
peerDependencies: {
"@aws-sdk/client-lambda": "^3.27.0"
}
脚.ts:
import {Lambda} from '@aws-sdk/client-lambda';
export function foo(lambda: Lambda): void {
...
}
bar.ts:
export function bar(): void {
...
}
索引.ts:
export * from './foo';
export * from './bar';
我的应用程序1 - 工作正常
包.json:
dependencies: {
"my-library": "1.0.0",
"@aws-sdk/client-lambda": "^3.27.0"
}
测试.ts:
import {foo} from 'my-library';
foo();
my-application2 - 不编译
包.json:
dependencies: {
"my-library": ...
}
测试:ts:
import {bar} from 'my-library';
bar();