0

我编写了一个发布到我的应用程序使用的私有 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();
4

0 回答 0